# Import Dataset
library(readxl)
sample2hotel <- read_excel("~/Desktop/MSBA/FALL II 2023/Data Mining/Project/sample2hotel.xlsx")
## New names:
## • `` -> `...1`
# Check numbers of observations and variable names
num_observations <- nrow(sample2hotel)
paste("Number of observations:", num_observations)
## [1] "Number of observations: 80000"
num_variables <- ncol(sample2hotel)
paste("Number of variables:", num_variables)
## [1] "Number of variables: 32"
# Check variable names
variable_names <- names(sample2hotel)
print(variable_names)
## [1] "...1" "ID" "Nationality"
## [4] "Age" "DaysSinceCreation" "NameHash"
## [7] "DocIDHash" "AverageLeadTime" "LodgingRevenue"
## [10] "OtherRevenue" "BookingsCanceled" "BookingsNoShowed"
## [13] "BookingsCheckedIn" "PersonsNights" "RoomNights"
## [16] "DaysSinceLastStay" "DaysSinceFirstStay" "DistributionChannel"
## [19] "MarketSegment" "SRHighFloor" "SRLowFloor"
## [22] "SRAccessibleRoom" "SRMediumFloor" "SRBathtub"
## [25] "SRShower" "SRCrib" "SRKingSizeBed"
## [28] "SRTwinBed" "SRNearElevator" "SRAwayFromElevator"
## [31] "SRNoAlcoholInMiniBar" "SRQuietRoom"
#summary(sample2hotel)
head(sample2hotel)
## # A tibble: 6 × 32
## ...1 ID Nationality Age DaysSinceCreation NameHash DocIDHash
## <dbl> <dbl> <chr> <chr> <dbl> <chr> <chr>
## 1 1 32375 GBR 25 536 0x644581B68FF7EE913… 0x279AC1…
## 2 2 74084 DEU 39 94 0x7DD5B780639019C38… 0x101EFE…
## 3 3 37550 ESP 45 459 0xA1501498BCD3B74CD… 0x653E12…
## 4 4 34105 ESP 43 509 0xCCDFE4E69CB8A7DFE… 0x6CA492…
## 5 5 19601 DEU 50 754 0x5C8E30E1AF69162DE… 0x9E8746…
## 6 6 55192 USA 43 238 0x08325B2C308294D4F… 0x025DAF…
## # ℹ 25 more variables: AverageLeadTime <dbl>, LodgingRevenue <dbl>,
## # OtherRevenue <dbl>, BookingsCanceled <dbl>, BookingsNoShowed <dbl>,
## # BookingsCheckedIn <dbl>, PersonsNights <dbl>, RoomNights <dbl>,
## # DaysSinceLastStay <dbl>, DaysSinceFirstStay <dbl>,
## # DistributionChannel <chr>, MarketSegment <chr>, SRHighFloor <dbl>,
## # SRLowFloor <dbl>, SRAccessibleRoom <dbl>, SRMediumFloor <dbl>,
## # SRBathtub <dbl>, SRShower <dbl>, SRCrib <dbl>, SRKingSizeBed <dbl>, …
# Check any rows duplicate
has_duplicates <- any(duplicated(sample2hotel))
has_duplicates
## [1] FALSE
The dataset doesn’t have any duplicate rows.
sample2hotel$ID <- as.numeric(sample2hotel$ID)
sample2hotel$Age <- as.numeric(sample2hotel$Age)
## Warning: NAs introduced by coercion
sample2hotel$DaysSinceCreation <- as.numeric(sample2hotel$DaysSinceCreation)
sample2hotel$AverageLeadTime <- as.numeric(sample2hotel$AverageLeadTime)
sample2hotel$LodgingRevenue <- as.numeric(sample2hotel$LodgingRevenue)
sample2hotel$OtherRevenue <- as.numeric(sample2hotel$OtherRevenue)
sample2hotel$PersonsNights <- as.numeric(sample2hotel$PersonsNights)
sample2hotel$RoomNights <- as.numeric(sample2hotel$RoomNights)
sample2hotel$DaysSinceLastStay <- as.numeric(sample2hotel$DaysSinceLastStay)
sample2hotel$DaysSinceFirstStay <- as.numeric(sample2hotel$DaysSinceFirstStay)
# Check missing values in the dataset
sample2hotel[sapply(sample2hotel, is.null)] <- NA
total_missing <- sum(is.na(sample2hotel))
paste("Total missing values:", total_missing)
## [1] "Total missing values: 3598"
# Remove rows with NA values
hotel2 <- na.omit(sample2hotel)
hotel2
## # A tibble: 76,402 × 32
## ...1 ID Nationality Age DaysSinceCreation NameHash DocIDHash
## <dbl> <dbl> <chr> <dbl> <dbl> <chr> <chr>
## 1 1 32375 GBR 25 536 0x644581B68FF7EE91… 0x279AC1…
## 2 2 74084 DEU 39 94 0x7DD5B780639019C3… 0x101EFE…
## 3 3 37550 ESP 45 459 0xA1501498BCD3B74C… 0x653E12…
## 4 4 34105 ESP 43 509 0xCCDFE4E69CB8A7DF… 0x6CA492…
## 5 5 19601 DEU 50 754 0x5C8E30E1AF69162D… 0x9E8746…
## 6 6 55192 USA 43 238 0x08325B2C308294D4… 0x025DAF…
## 7 7 26236 ESP 29 625 0x7350FADF2956893C… 0x3EC536…
## 8 8 28011 PRT 41 598 0xDFB6D9BC7BAD2C5F… 0x00AB42…
## 9 9 74413 USA 40 92 0x750772601883ADAA… 0xB01AEB…
## 10 10 7409 PRT 54 941 0x824FDB25E6D2030B… 0x291D10…
## # ℹ 76,392 more rows
## # ℹ 25 more variables: AverageLeadTime <dbl>, LodgingRevenue <dbl>,
## # OtherRevenue <dbl>, BookingsCanceled <dbl>, BookingsNoShowed <dbl>,
## # BookingsCheckedIn <dbl>, PersonsNights <dbl>, RoomNights <dbl>,
## # DaysSinceLastStay <dbl>, DaysSinceFirstStay <dbl>,
## # DistributionChannel <chr>, MarketSegment <chr>, SRHighFloor <dbl>,
## # SRLowFloor <dbl>, SRAccessibleRoom <dbl>, SRMediumFloor <dbl>, …
# Remove rows with AverageLeadTime less than 0
hotel2 <- hotel2[hotel2$AverageLeadTime >= 0, ]
#hotel2 <- subset(hotel2, !(BookingsCanceled == 0 & BookingsNoShowed == 0 & BookingsCheckedIn == 0))
# Find inconsistencies in the dataset
typo_hotel2 <- hotel2[hotel2$DaysSinceLastStay == -1 & hotel2$DaysSinceFirstStay == -1, ]
print(typo_hotel2)
## # A tibble: 18,249 × 32
## ...1 ID Nationality Age DaysSinceCreation NameHash DocIDHash
## <dbl> <dbl> <chr> <dbl> <dbl> <chr> <chr>
## 1 15 72224 GEO 34 107 0xF285EAB72934A75D… 0xB36C72…
## 2 16 55252 GBR 28 238 0xE280F9F3128CBE7B… 0x8A3433…
## 3 32 81462 SWE 25 27 0x1C19707F0F5032D9… 0xE3C80C…
## 4 36 71223 BEL 60 115 0xC22E5955C439E8A2… 0x76C813…
## 5 39 54401 CAN 54 244 0x85D8293602A6934C… 0xAE30FA…
## 6 46 62513 BEL 43 179 0xD570477846FBF70E… 0x8BE24A…
## 7 48 70212 FRA 35 122 0x8CC1C90A2B6073FF… 0x703CAD…
## 8 50 2767 HRV 48 1025 0x40CF35B99FA16F2F… 0x94A976…
## 9 55 70905 ESP 53 117 0x26AAF3108829064C… 0x5B4981…
## 10 58 80643 ESP 58 38 0xF6E74CD38685D6AB… 0xAC0285…
## # ℹ 18,239 more rows
## # ℹ 25 more variables: AverageLeadTime <dbl>, LodgingRevenue <dbl>,
## # OtherRevenue <dbl>, BookingsCanceled <dbl>, BookingsNoShowed <dbl>,
## # BookingsCheckedIn <dbl>, PersonsNights <dbl>, RoomNights <dbl>,
## # DaysSinceLastStay <dbl>, DaysSinceFirstStay <dbl>,
## # DistributionChannel <chr>, MarketSegment <chr>, SRHighFloor <dbl>,
## # SRLowFloor <dbl>, SRAccessibleRoom <dbl>, SRMediumFloor <dbl>, …
# Correct typping errors
hotel2$DaysSinceLastStay <- ifelse(hotel2$DaysSinceLastStay == -1, 1, hotel2$DaysSinceLastStay)
hotel2$DaysSinceFirstStay <- ifelse(hotel2$DaysSinceFirstStay == -1, 1, hotel2$DaysSinceFirstStay)
# Boxplot of Age, DaysSinceCreation, AverageLeadTime, LodgingRevenue, OtherRevenue,BookingsCanceled, BookingsNoShowed, BookingsCheckedIn, PersonsNights, RoomNights, DaysSinceLastStay, DaysSinceFirstStay
boxplot(hotel2$Age, main = "Box Plot of Age", ylab = "Age")
boxplot(hotel2$DaysSinceCreation, main = "Box Plot of DaysSinceCreation", ylab = "DaysSinceCreation")
boxplot(hotel2$AverageLeadTime, main = "Box Plot of AverageLeadTime", ylab = "AverageLeadTime")
boxplot(hotel2$LodgingRevenue, main = "Box Plot of LodgingRevenue", ylab = "LodgingRevenue")
boxplot(hotel2$OtherRevenue, main = "Box Plot of OtherRevenue", ylab = "OtherRevenue")
boxplot(hotel2$BookingsCanceled, main = "Box Plot of BookingsCanceled", ylab = "BookingsCanceled")
boxplot(hotel2$BookingsNoShowed, main = "Box Plot of BookingsNoShowed", ylab = "BookingsNoShowed")
boxplot(hotel2$BookingsCheckedIn, main = "Box Plot of BookingsCheckedIn", ylab = "BookingsCheckedIn")
boxplot(hotel2$PersonsNights, main = "Box Plot of PersonsNights", ylab = "PersonsNights")
boxplot(hotel2$RoomNights, main = "Box Plot of RoomNights", ylab = "RoomNights")
boxplot(hotel2$DaysSinceLastStay, main = "Box Plot of DaysSinceLastStay", ylab = "DaysSinceLastStay")
boxplot(hotel2$DaysSinceFirstStay, main = "Box Plot of DaysSinceFirstStay", ylab = "DaysSinceFirstStay")
Outliers are identified in the boxplot of Age, AverageLeadTime, LodgingRevenue, OtherRevenue, PersonsNights, and RoomNights.
summarystatistics_numericvariables <- data.frame(
Variable = c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay"),
Count = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], function(x) sum(!is.na(x))),
Mean = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], mean, na.rm = TRUE),
Std = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], sd, na.rm = TRUE),
Min = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], min, na.rm = TRUE),
Q1 = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], quantile, prob = 0.25, na.rm = TRUE),
Median = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], median, na.rm = TRUE),
Q3 = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], quantile, prob = 0.75, na.rm = TRUE),
Max = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], max, na.rm = TRUE)
)
summarystatistics_numericvariables$Mean <- round(summarystatistics_numericvariables$Mean, 2)
summarystatistics_numericvariables$Std <- round(summarystatistics_numericvariables$Std, 2)
summarystatistics_numericvariables$Min <- round(summarystatistics_numericvariables$Min, 2)
summarystatistics_numericvariables$Q1 <- round(summarystatistics_numericvariables$Q1, 2)
summarystatistics_numericvariables$Median <- round(summarystatistics_numericvariables$Median, 2)
summarystatistics_numericvariables$Q3 <- round(summarystatistics_numericvariables$Q3, 2)
summarystatistics_numericvariables$Max <- round(summarystatistics_numericvariables$Max, 2)
# Print the summary table
print(summarystatistics_numericvariables)
## Variable Count Mean Std Min Q1 Median Q3
## Age Age 76394 45.39 16.57 -11 34 46.0 57.00
## DaysSinceCreation DaysSinceCreation 76394 446.57 310.78 0 174 384.0 703.75
## AverageLeadTime AverageLeadTime 76394 66.78 87.93 0 0 30.0 104.00
## LodgingRevenue LodgingRevenue 76394 302.40 369.26 0 64 236.0 407.40
## OtherRevenue OtherRevenue 76394 68.02 113.29 0 2 39.5 88.50
## BookingsCanceled BookingsCanceled 76394 0.00 0.06 0 0 0.0 0.00
## BookingsNoShowed BookingsNoShowed 76394 0.00 0.03 0 0 0.0 0.00
## BookingsCheckedIn BookingsCheckedIn 76394 0.79 0.69 0 1 1.0 1.00
## PersonsNights PersonsNights 76394 4.70 4.59 0 1 4.0 8.00
## RoomNights RoomNights 76394 2.38 2.20 0 1 2.0 4.00
## DaysSinceLastStay DaysSinceLastStay 76394 394.95 343.28 0 25 349.0 679.00
## DaysSinceFirstStay DaysSinceFirstStay 76394 397.17 344.03 1 26 357.0 683.00
## Max
## Age 122.00
## DaysSinceCreation 1095.00
## AverageLeadTime 588.00
## LodgingRevenue 9682.40
## OtherRevenue 7730.25
## BookingsCanceled 9.00
## BookingsNoShowed 3.00
## BookingsCheckedIn 66.00
## PersonsNights 116.00
## RoomNights 116.00
## DaysSinceLastStay 1104.00
## DaysSinceFirstStay 1117.00
# Calculate the quartiles and IQR : `Age`
Q1 <- quantile(hotel2$Age, 0.25)
Q3 <- quantile(hotel2$Age, 0.75)
IQR <- Q3 - Q1
# Define the lower and upper bounds for potential outliers
lower_bound <- Q1 - 1.5 * IQR
upper_bound <- Q3 + 1.5 * IQR
# Extract potential outliers
outliers <- hotel2$Age[hotel2$Age < lower_bound | hotel2$Age > upper_bound]
# Create a data frame with the outliers
outliers_age_df <- data.frame(Outlier = outliers)
# View the data frame
#print(outliers_age_df)
# Remove the outliers in Age from the data frame
hotel2 <- hotel2[hotel2$Age > lower_bound & hotel2$Age < upper_bound, ]
#print(hotel2)
# Calculate the quartiles and IQR : `AverageLeadTime`
Q1 <- quantile(hotel2$AverageLeadTime, 0.25)
Q3 <- quantile(hotel2$AverageLeadTime, 0.75)
IQR <- Q3 - Q1
# Define the lower and upper bounds for potential outliers
lower_bound <- Q1 - 1.5 * IQR
upper_bound <- Q3 + 1.5 * IQR
# Extract potential outliers
outliers <- hotel2$AverageLeadTime[hotel2$AverageLeadTime < lower_bound | hotel2$AverageLeadTime > upper_bound]
# Create a data frame with the outliers
outliers_AverageLeadTime_df <- data.frame(Outlier = outliers)
# View the data frame
#print(outliers_AverageLeadTime_df)
# Remove potential outliers in AverageLeadTime from the data frame
hotel2 <- hotel2[hotel2$AverageLeadTime > lower_bound & hotel2$AverageLeadTime < upper_bound, ]
# Print the updated data frame
#print(hotel2)
# Calculate the quartiles and IQR: `LodgingRevenue`
Q1 <- quantile(hotel2$LodgingRevenue, 0.25)
Q3 <- quantile(hotel2$LodgingRevenue, 0.75)
IQR <- Q3 - Q1
# Define the lower and upper bounds for potential outliers
lower_bound <- Q1 - 1.5 * IQR
upper_bound <- Q3 + 1.5 * IQR
# Extract potential outliers
outliers <- hotel2$LodgingRevenue[hotel2$LodgingRevenue < lower_bound | hotel2$LodgingRevenue > upper_bound]
# Create a data frame with the outliers
outliers_LodgingRevenue_df <- data.frame(Outlier = outliers)
# View the data frame
#print(outliers_LodgingRevenue_df)
hist(hotel2$LodgingRevenue,
main = "Histogram of LodgingRevenue",
xlab = "LodgingRevenue",
ylab = "Frequency",
col = "skyblue",
border = "black")
# Add x-axis labels at specified intervals
axis(1, at = seq(0, max(hotel2$LodgingRevenue), by = 5))
# Add text labels with values on the bars
text(
x = pretty(hotel2$LodgingRevenue),
y = hist(hotel2$LodgingRevenue, plot = FALSE)$counts,
label = hist(hotel2$LodgingRevenue, plot = FALSE)$counts,
pos = 3,
cex = 0.8,
col = "darkred"
)
hotel2 <- hotel2[hotel2$LodgingRevenue >= 55, ]
hotel2 <- hotel2[hotel2$PersonsNights > 0, ]
hotel2 <- hotel2[hotel2$Age >= 18, ]
# Remove potential outliers from the data frame
hotel2 <- hotel2[hotel2$LodgingRevenue > lower_bound & hotel2$LodgingRevenue < upper_bound, ]
# Print the updated data frame
#print(hotel2)
# Calculate the quartiles and IQR: OtherRevenue
Q1 <- quantile(hotel2$OtherRevenue, 0.25)
Q3 <- quantile(hotel2$OtherRevenue, 0.75)
IQR <- Q3 - Q1
# Define the lower and upper bounds for potential outliers
lower_bound <- Q1 - 1.5 * IQR
upper_bound <- Q3 + 1.5 * IQR
# Extract potential outliers
outliers <- hotel2$OtherRevenue[hotel2$OtherRevenue < lower_bound | hotel2$OtherRevenue > upper_bound]
# Create a data frame with the outliers
outliers_OtherRevenue_df <- data.frame(Outlier = outliers)
# View the data frame
#print(outliers_OtherRevenue_df)
# Remove the outliers in OtherRevenue from the data frame
hotel2 <- hotel2[hotel2$OtherRevenue >= lower_bound & hotel2$OtherRevenue <= upper_bound, ]
# Print the updated data frame
#print(hotel2)
# Calculate the quartiles and IQR: RoomNights
Q1 <- quantile(hotel2$RoomNights, 0.25)
Q3 <- quantile(hotel2$RoomNights, 0.75)
IQR <- Q3 - Q1
# Define the lower and upper bounds for potential outliers
lower_bound <- Q1 - 1.5 * IQR
upper_bound <- Q3 + 1.5 * IQR
# Extract potential outliers
outliers <- hotel2$RoomNights[hotel2$RoomNights < lower_bound | hotel2$RoomNights > upper_bound]
# Create a data frame with the outliers
#outliers_RoomNights_df <- data.frame(Outlier = outliers)
# View the data frame
#print(outliers_RoomNights_df)
# Remove the outliers in RoomNights from the data frame
hotel2 <- hotel2[hotel2$RoomNights > lower_bound & hotel2$RoomNights < upper_bound, ]
# Print the updated data frame
#print(hotel2)
# Calculate the quartiles and IQR: PersonsNights
Q1 <- quantile(hotel2$PersonsNights, 0.25)
Q3 <- quantile(hotel2$PersonsNights, 0.75)
IQR <- Q3 - Q1
# Define the lower and upper bounds for potential outliers
lower_bound <- Q1 - 1.5 * IQR
upper_bound <- Q3 + 1.5 * IQR
# Extract potential outliers
outliers <- hotel2$PersonsNights[hotel2$PersonsNights < lower_bound | hotel2$PersonsNights > upper_bound]
# Create a data frame with the outliers
outliers_PersonsNights_df <- data.frame(Outlier = outliers)
# View the data frame
print(outliers_PersonsNights_df)
## Outlier
## 1 20
## 2 18
## 3 16
## 4 20
## 5 20
## 6 18
## 7 16
## 8 16
## 9 18
## 10 16
## 11 16
## 12 18
## 13 16
## 14 18
## 15 20
## 16 16
## 17 18
## 18 20
## 19 16
## 20 18
## 21 16
## 22 16
## 23 16
## 24 20
## 25 16
## 26 18
## 27 16
## 28 16
## 29 16
## 30 20
## 31 20
## 32 16
## 33 24
## 34 16
## 35 16
## 36 20
## 37 20
## 38 20
## 39 16
## 40 18
## 41 16
## 42 18
## 43 18
## 44 16
## 45 18
## 46 16
## 47 20
## 48 16
## 49 18
## 50 16
## 51 16
## 52 16
## 53 18
## 54 16
## 55 16
## 56 16
## 57 16
## 58 24
## 59 16
## 60 16
## 61 16
## 62 16
## 63 16
## 64 16
## 65 16
## 66 16
## 67 20
## 68 18
## 69 20
## 70 18
## 71 16
## 72 18
## 73 16
## 74 16
## 75 16
## 76 18
## 77 20
## 78 18
## 79 24
## 80 16
## 81 16
## 82 18
## 83 16
## 84 16
## 85 16
## 86 18
## 87 18
## 88 18
## 89 18
## 90 16
## 91 18
## 92 16
## 93 16
## 94 16
## 95 16
## 96 18
## 97 20
## 98 18
## 99 16
## 100 16
## 101 18
## 102 16
## 103 18
## 104 16
## 105 18
## 106 20
## 107 16
## 108 16
## 109 16
## 110 18
## 111 18
## 112 24
## 113 20
## 114 16
## 115 16
## 116 16
## 117 16
## 118 20
## 119 16
## 120 18
## 121 16
## 122 16
## 123 16
## 124 16
## 125 16
## 126 18
## 127 18
## 128 18
## 129 18
## 130 20
## 131 18
## 132 20
## 133 18
## 134 16
## 135 18
## 136 20
## 137 20
## 138 18
## 139 16
## 140 18
## 141 16
## 142 16
## 143 16
## 144 18
## 145 16
## 146 18
## 147 16
## 148 18
## 149 16
## 150 16
## 151 16
## 152 16
## 153 16
## 154 16
## 155 20
## 156 16
## 157 16
## 158 20
## 159 18
## 160 16
## 161 16
## 162 18
## 163 16
## 164 16
## 165 16
## 166 18
## 167 16
## 168 20
## 169 20
## 170 20
## 171 24
## 172 18
## 173 16
## 174 18
## 175 24
## 176 16
## 177 16
## 178 16
## 179 24
## 180 18
## 181 18
## 182 16
## 183 16
## 184 16
## 185 16
## 186 18
## 187 16
## 188 16
## 189 18
## 190 16
## 191 18
## 192 18
## 193 20
## 194 16
## 195 16
## 196 18
## 197 20
## 198 16
## 199 16
## 200 24
## 201 16
## 202 18
## 203 16
## 204 18
## 205 16
## 206 16
## 207 18
## 208 18
## 209 24
## 210 16
## 211 18
## 212 20
## 213 20
## 214 16
## 215 18
## 216 18
## 217 16
## 218 16
## 219 16
## 220 18
## 221 18
## 222 18
## 223 16
## 224 18
## 225 18
## 226 16
## 227 16
## 228 18
## 229 18
## 230 16
## 231 16
## 232 16
## 233 24
## 234 16
## 235 16
## 236 18
## 237 16
## 238 16
## 239 16
## 240 16
## 241 18
## 242 18
## 243 20
## 244 16
## 245 16
## 246 20
## 247 16
## 248 18
## 249 18
## 250 16
## 251 18
## 252 20
## 253 16
## 254 18
## 255 18
## 256 16
## 257 18
## 258 16
## 259 16
## 260 16
## 261 18
## 262 18
## 263 16
## 264 16
## 265 16
## 266 16
## 267 16
## 268 18
## 269 18
## 270 18
## 271 18
## 272 16
## 273 20
## 274 18
## 275 18
## 276 18
## 277 16
## 278 18
## 279 17
## 280 18
## 281 18
## 282 16
## 283 18
## 284 18
## 285 18
## 286 18
## 287 16
## 288 18
## 289 18
## 290 18
## 291 16
## 292 18
## 293 18
## 294 20
## 295 20
## 296 20
## 297 16
## 298 16
## 299 18
## 300 18
## 301 16
## 302 16
## 303 16
## 304 16
# Remove the outliers in PersonsNights from the data frame
hotel2 <- hotel2[hotel2$PersonsNights > lower_bound & hotel2$PersonsNights < upper_bound, ]
# Print the updated data frame
#print(hotel2)
count_rows <- sum(hotel2$DaysSinceLastStay == 1 & hotel2$DaysSinceFirstStay == 1)
print(paste("Number of rows with DaysSinceLastStay == 1 and DaysSinceFirstStay == 1:", count_rows))
## [1] "Number of rows with DaysSinceLastStay == 1 and DaysSinceFirstStay == 1: 2"
hotel2 <- hotel2[!(hotel2$DaysSinceLastStay == 1 & hotel2$DaysSinceFirstStay == 1), ]
Visualizing distributions of Categorical Variables
options(repos = c(CRAN = "https://cran.rstudio.com/"))
install.packages('ggplot2')
##
## The downloaded binary packages are in
## /var/folders/q6/vr1t5vmx405cg6xfgtcl3np80000gn/T//RtmpmCK8A5/downloaded_packages
library(ggplot2)
categorical_variables <- c(
"SRHighFloor", "SRLowFloor", "SRAccessibleRoom", "SRMediumFloor",
"SRBathtub", "SRShower", "SRCrib", "SRKingSizeBed", "SRTwinBed",
"SRNearElevator", "SRAwayFromElevator", "SRNoAlcoholInMiniBar", "SRQuietRoom"
)
for (variable in categorical_variables) {
plot <- ggplot(data = hotel2, aes(x = hotel2[[variable]])) +
geom_bar() +
labs(title = variable, x = "Categories", y = "Frequency")
print(plot)
}
## Warning: Use of `hotel2[[variable]]` is discouraged.
## ℹ Use `.data[[variable]]` instead.
## Warning: Use of `hotel2[[variable]]` is discouraged.
## ℹ Use `.data[[variable]]` instead.
## Warning: Use of `hotel2[[variable]]` is discouraged.
## ℹ Use `.data[[variable]]` instead.
## Warning: Use of `hotel2[[variable]]` is discouraged.
## ℹ Use `.data[[variable]]` instead.
## Warning: Use of `hotel2[[variable]]` is discouraged.
## ℹ Use `.data[[variable]]` instead.
## Warning: Use of `hotel2[[variable]]` is discouraged.
## ℹ Use `.data[[variable]]` instead.
## Warning: Use of `hotel2[[variable]]` is discouraged.
## ℹ Use `.data[[variable]]` instead.
## Warning: Use of `hotel2[[variable]]` is discouraged.
## ℹ Use `.data[[variable]]` instead.
## Warning: Use of `hotel2[[variable]]` is discouraged.
## ℹ Use `.data[[variable]]` instead.
## Warning: Use of `hotel2[[variable]]` is discouraged.
## ℹ Use `.data[[variable]]` instead.
## Warning: Use of `hotel2[[variable]]` is discouraged.
## ℹ Use `.data[[variable]]` instead.
## Warning: Use of `hotel2[[variable]]` is discouraged.
## ℹ Use `.data[[variable]]` instead.
## Warning: Use of `hotel2[[variable]]` is discouraged.
## ℹ Use `.data[[variable]]` instead.
hotel2 <- hotel2[, !(names(hotel2) %in% c("NameHash", "DocIDHash"))]
# hotel2 <- hotel2[, !(names(hotel2) %in% c("ID"))]
Create TotalRevenue
hotel2$TotalRevenue <- hotel2$LodgingRevenue + hotel2$OtherRevenue
# Calculate the quartiles and IQR: TotalRevenue
#Q1 <- quantile(hotel2$TotalRevenue, 0.25)
#Q3 <- quantile(hotel2$TotalRevenue, 0.75)
#IQR <- Q3 - Q1
# Define the lower and upper bounds for potential outliers
#lower_bound <- Q1 - 1.5 * IQR
#upper_bound <- Q3 + 1.5 * IQR
# Extract potential outliers
#outliers <- hotel2$TotalRevenue[hotel2$TotalRevenue < lower_bound | hotel2$TotalRevenue > upper_bound]
# Create a data frame with the outliers
#outliers_TotalRevenue_df <- data.frame(Outlier = outliers)
# View the data frame
#print(outliers_TotalRevenue_df)
# Remove the outliers in TotalRevenue from the data frame
#hotel2 <- hotel2[hotel2$TotalRevenue > lower_bound & hotel2$TotalRevenue < upper_bound, ]
# Print the updated data frame
#print(hotel2)
Create RatePerNight
#hotel2$AverageSpendingDaily <- round(hotel2$AverageSpendingDaily, 2)
hotel2$RatePerNight <- (hotel2$LodgingRevenue / (hotel2$RoomNights))
hotel2$RatePerNight <- round(hotel2$RatePerNight, 2)
**Create AgeGroups
# Create age groups
hotel2$AgeGroups <- cut(hotel2$Age,
breaks = c(0, 30, 45, 60, Inf),
labels = c("Under 30", "31-45", "46-60", "60+"),
include.lowest = TRUE)
# View the first few rows of the dataset with age groups
#head(hotel2[c("Age", "AgeGroups")])
str(hotel2)
## tibble [46,179 × 33] (S3: tbl_df/tbl/data.frame)
## $ ...1 : num [1:46179] 1 2 3 4 5 6 7 8 9 10 ...
## $ ID : num [1:46179] 32375 74084 37550 34105 19601 ...
## $ Nationality : chr [1:46179] "GBR" "DEU" "ESP" "ESP" ...
## $ Age : num [1:46179] 25 39 45 43 50 43 29 41 40 54 ...
## $ DaysSinceCreation : num [1:46179] 536 94 459 509 754 238 625 598 92 941 ...
## $ AverageLeadTime : num [1:46179] 48 36 20 129 50 69 64 2 136 2 ...
## $ LodgingRevenue : num [1:46179] 213 157 124 560 238 ...
## $ OtherRevenue : num [1:46179] 41.5 50 11 68 60 56 46 84.3 14 7 ...
## $ BookingsCanceled : num [1:46179] 0 0 0 0 0 0 0 0 0 0 ...
## $ BookingsNoShowed : num [1:46179] 0 0 0 0 0 0 0 0 0 0 ...
## $ BookingsCheckedIn : num [1:46179] 1 1 1 1 1 1 1 1 1 1 ...
## $ PersonsNights : num [1:46179] 6 4 1 12 4 8 4 3 2 1 ...
## $ RoomNights : num [1:46179] 3 2 1 4 4 4 2 3 2 1 ...
## $ DaysSinceLastStay : num [1:46179] 539 96 460 513 758 242 627 601 94 942 ...
## $ DaysSinceFirstStay : num [1:46179] 539 96 460 513 758 242 627 601 94 942 ...
## $ DistributionChannel : chr [1:46179] "Travel Agent/Operator" "Travel Agent/Operator" "Electronic Distribution" "Direct" ...
## $ MarketSegment : chr [1:46179] "Travel Agent/Operator" "Other" "Other" "Direct" ...
## $ SRHighFloor : num [1:46179] 0 0 0 0 0 0 0 0 0 0 ...
## $ SRLowFloor : num [1:46179] 0 0 0 0 0 0 0 0 0 0 ...
## $ SRAccessibleRoom : num [1:46179] 0 0 0 0 0 0 0 0 0 0 ...
## $ SRMediumFloor : num [1:46179] 0 0 0 0 0 0 0 0 0 0 ...
## $ SRBathtub : num [1:46179] 0 0 0 0 0 0 0 0 0 0 ...
## $ SRShower : num [1:46179] 0 0 0 0 0 0 0 0 0 0 ...
## $ SRCrib : num [1:46179] 0 0 0 1 0 0 0 0 0 0 ...
## $ SRKingSizeBed : num [1:46179] 0 1 0 1 0 0 1 1 1 0 ...
## $ SRTwinBed : num [1:46179] 0 0 0 0 0 1 0 0 0 0 ...
## $ SRNearElevator : num [1:46179] 0 0 0 0 0 0 0 0 0 0 ...
## $ SRAwayFromElevator : num [1:46179] 0 0 0 0 0 0 0 0 0 0 ...
## $ SRNoAlcoholInMiniBar: num [1:46179] 0 0 0 0 0 0 0 0 0 0 ...
## $ SRQuietRoom : num [1:46179] 0 0 0 0 0 0 1 1 0 0 ...
## $ TotalRevenue : num [1:46179] 255 207 135 628 298 ...
## $ RatePerNight : num [1:46179] 71.1 78.4 124 140 59.5 ...
## $ AgeGroups : Factor w/ 4 levels "Under 30","31-45",..: 1 2 2 2 3 2 1 2 2 3 ...
## - attr(*, "na.action")= 'omit' Named int [1:3598] 77 89 100 114 133 180 186 242 273 283 ...
## ..- attr(*, "names")= chr [1:3598] "77" "89" "100" "114" ...
# Convert numerical variables to binary categorical variables
variables_convert <- c("SRHighFloor",
"SRLowFloor", "SRAccessibleRoom", "SRMediumFloor",
"SRBathtub", "SRShower", "SRCrib", "SRKingSizeBed",
"SRTwinBed", "SRNearElevator", "SRAwayFromElevator",
"SRNoAlcoholInMiniBar", "SRQuietRoom"
)
hotel2[variables_convert] <- lapply(hotel2[variables_convert], as.factor)
#print(hotel2)
variable_types <- sapply(hotel2, class)
variable_types_df <- data.frame(VariableName = names(variable_types), DataType = variable_types)
print(variable_types_df)
## VariableName DataType
## ...1 ...1 numeric
## ID ID numeric
## Nationality Nationality character
## Age Age numeric
## DaysSinceCreation DaysSinceCreation numeric
## AverageLeadTime AverageLeadTime numeric
## LodgingRevenue LodgingRevenue numeric
## OtherRevenue OtherRevenue numeric
## BookingsCanceled BookingsCanceled numeric
## BookingsNoShowed BookingsNoShowed numeric
## BookingsCheckedIn BookingsCheckedIn numeric
## PersonsNights PersonsNights numeric
## RoomNights RoomNights numeric
## DaysSinceLastStay DaysSinceLastStay numeric
## DaysSinceFirstStay DaysSinceFirstStay numeric
## DistributionChannel DistributionChannel character
## MarketSegment MarketSegment character
## SRHighFloor SRHighFloor factor
## SRLowFloor SRLowFloor factor
## SRAccessibleRoom SRAccessibleRoom factor
## SRMediumFloor SRMediumFloor factor
## SRBathtub SRBathtub factor
## SRShower SRShower factor
## SRCrib SRCrib factor
## SRKingSizeBed SRKingSizeBed factor
## SRTwinBed SRTwinBed factor
## SRNearElevator SRNearElevator factor
## SRAwayFromElevator SRAwayFromElevator factor
## SRNoAlcoholInMiniBar SRNoAlcoholInMiniBar factor
## SRQuietRoom SRQuietRoom factor
## TotalRevenue TotalRevenue numeric
## RatePerNight RatePerNight numeric
## AgeGroups AgeGroups factor
# Check numbers of observations and variable names
num_observations <- nrow(hotel2)
paste("Number of observations:", num_observations)
## [1] "Number of observations: 46179"
num_variables <- ncol(hotel2)
paste("Number of variables:", num_variables)
## [1] "Number of variables: 33"
summarystatistics_numericvariables <- data.frame(
Variable = c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue","TotalRevenue", "RatePerNight", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay"),
Count = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue","TotalRevenue", "RatePerNight", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], function(x) sum(!is.na(x))),
Mean = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue","TotalRevenue", "RatePerNight", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], mean, na.rm = TRUE),
Std = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue","TotalRevenue", "RatePerNight", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], sd, na.rm = TRUE),
Min = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue","TotalRevenue", "RatePerNight", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], min, na.rm = TRUE),
Q1 = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue","TotalRevenue", "RatePerNight", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], quantile, prob = 0.25, na.rm = TRUE),
Median = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue","TotalRevenue", "RatePerNight", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], median, na.rm = TRUE),
Q3 = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue","TotalRevenue", "RatePerNight", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], quantile, prob = 0.75, na.rm = TRUE),
Max = sapply(hotel2[, c("Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue","TotalRevenue", "RatePerNight", "BookingsCanceled", "BookingsNoShowed", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay")], max, na.rm = TRUE)
)
summarystatistics_numericvariables$Mean <- round(summarystatistics_numericvariables$Mean, 2)
summarystatistics_numericvariables$Std <- round(summarystatistics_numericvariables$Std, 2)
summarystatistics_numericvariables$Min <- round(summarystatistics_numericvariables$Min, 2)
summarystatistics_numericvariables$Q1 <- round(summarystatistics_numericvariables$Q1, 2)
summarystatistics_numericvariables$Median <- round(summarystatistics_numericvariables$Median, 2)
summarystatistics_numericvariables$Q3 <- round(summarystatistics_numericvariables$Q3, 2)
summarystatistics_numericvariables$Max <- round(summarystatistics_numericvariables$Max, 2)
# Print the summary table
print(summarystatistics_numericvariables)
## Variable Count Mean Std Min Q1 Median
## Age Age 46179 46.91 13.92 18.00 36 47.0
## DaysSinceCreation DaysSinceCreation 46179 521.95 304.24 0.00 251 525.0
## AverageLeadTime AverageLeadTime 46179 71.20 66.60 0.00 14 51.0
## LodgingRevenue LodgingRevenue 46179 314.19 178.59 55.00 177 282.0
## OtherRevenue OtherRevenue 46179 58.81 46.21 0.00 23 46.5
## TotalRevenue TotalRevenue 46179 373.00 202.39 56.76 220 345.3
## RatePerNight RatePerNight 46179 120.82 63.75 13.80 83 108.0
## BookingsCanceled BookingsCanceled 46179 0.00 0.03 0.00 0 0.0
## BookingsNoShowed BookingsNoShowed 46179 0.00 0.02 0.00 0 0.0
## BookingsCheckedIn BookingsCheckedIn 46179 1.02 0.16 1.00 1 1.0
## PersonsNights PersonsNights 46179 5.27 3.04 1.00 3 5.0
## RoomNights RoomNights 46179 2.74 1.28 1.00 2 3.0
## DaysSinceLastStay DaysSinceLastStay 46179 523.04 304.19 0.00 252 525.0
## DaysSinceFirstStay DaysSinceFirstStay 46179 524.67 304.24 2.00 253 528.0
## Q3 Max
## Age 57.00 91.00
## DaysSinceCreation 791.00 1095.00
## AverageLeadTime 112.00 259.00
## LodgingRevenue 410.00 1018.50
## OtherRevenue 83.90 207.20
## TotalRevenue 485.00 1221.40
## RatePerNight 137.82 988.75
## BookingsCanceled 0.00 2.00
## BookingsNoShowed 0.00 2.00
## BookingsCheckedIn 1.00 6.00
## PersonsNights 8.00 15.00
## RoomNights 4.00 6.00
## DaysSinceLastStay 793.00 1100.00
## DaysSinceFirstStay 794.00 1100.00
# Top 10 nationalities of tourists visited the hotel
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Create a summary table of the top 10 nationalities and their frequencies
top50_nationalities <- hotel2 %>%
count(Nationality, sort = TRUE) %>%
head(50)
# View the top nationalities
print(top50_nationalities)
## # A tibble: 50 × 2
## Nationality n
## <chr> <int>
## 1 FRA 7035
## 2 PRT 5365
## 3 DEU 5357
## 4 GBR 4898
## 5 ESP 3199
## 6 ITA 1980
## 7 USA 1948
## 8 BEL 1678
## 9 NLD 1604
## 10 BRA 1559
## # ℹ 40 more rows
ggplot(hotel2, aes(x = factor(AgeGroups), fill = factor(AgeGroups))) +
geom_bar() +
labs(title = "Distribution of Age Groups", x = "Age Groups", y = "Frequency") +
theme_minimal() +
theme(panel.grid = element_blank(),
text = element_text(size = 14)) +
scale_fill_discrete()
library(dplyr)
hotel2 %>%
summarise(
across(
c(SRHighFloor, SRLowFloor, SRAccessibleRoom, SRMediumFloor,
SRBathtub, SRShower, SRCrib, SRKingSizeBed, SRTwinBed,
SRNearElevator, SRAwayFromElevator, SRNoAlcoholInMiniBar, SRQuietRoom),
list(
Count_No = ~sum(. == 0),
Count_Yes = ~sum(. == 1)
)
)
)
## # A tibble: 1 × 26
## SRHighFloor_Count_No SRHighFloor_Count_Yes SRLowFloor_Count_No
## <int> <int> <int>
## 1 44100 2079 46122
## # ℹ 23 more variables: SRLowFloor_Count_Yes <int>,
## # SRAccessibleRoom_Count_No <int>, SRAccessibleRoom_Count_Yes <int>,
## # SRMediumFloor_Count_No <int>, SRMediumFloor_Count_Yes <int>,
## # SRBathtub_Count_No <int>, SRBathtub_Count_Yes <int>,
## # SRShower_Count_No <int>, SRShower_Count_Yes <int>, SRCrib_Count_No <int>,
## # SRCrib_Count_Yes <int>, SRKingSizeBed_Count_No <int>,
## # SRKingSizeBed_Count_Yes <int>, SRTwinBed_Count_No <int>, …
library(tidyr)
hotel2 %>%
pivot_longer(
cols = c(BookingsCanceled, BookingsNoShowed, BookingsCheckedIn),
names_to = "Variable",
values_to = "Value"
) %>%
group_by(Variable, Value) %>%
summarise(
Percentage = n() / nrow(hotel2) * 100
) %>%
pivot_wider(
names_from = Value,
values_from = Percentage,
names_prefix = "Count_"
)
## `summarise()` has grouped output by 'Variable'. You can override using the
## `.groups` argument.
## # A tibble: 3 × 8
## # Groups: Variable [3]
## Variable Count_0 Count_1 Count_2 Count_3 Count_4 Count_5 Count_6
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 BookingsCanceled 99.9 0.0736 0.00217 NA NA NA NA
## 2 BookingsCheckedIn NA 98.4 1.37 0.117 0.0563 0.00866 0.00650
## 3 BookingsNoShowed 100. 0.0260 0.00433 NA NA NA NA
# Distribution of Bookings Canceled
ggplot(hotel2, aes(x = factor(BookingsCanceled))) +
geom_bar() +
labs(title = "Distribution of Bookings Canceled", x = "Number of Cancellations", y = "Frequency") +
scale_y_log10() +
theme_minimal()+
theme(panel.grid = element_blank())
# Distribution of BookingsNoShowed
ggplot(hotel2, aes(x = factor(BookingsNoShowed))) +
geom_bar() +
labs(title = "Distribution of BookingsNoShowed", x = "Number of NoShowed", y = "Frequency") +
scale_y_log10() +
theme_minimal()+
theme(panel.grid = element_blank())
CheckedIn_Rows <- hotel2[hotel2$BookingsCheckedIn > 0, ]
# View the selected rows
#print(CheckedIn_Rows)
# Distribution of BookingsCheckedIn
library(ggplot2)
ggplot(hotel2, aes(x = factor(BookingsCheckedIn))) +
geom_bar() +
labs(title = "Distribution of BookingsCheckedIn", x = "Number of CheckedIn", y = "Frequency") +
scale_y_log10() +
theme_minimal()+
theme(panel.grid = element_blank())
hotel2 %>%
pivot_longer(
cols = c(SRHighFloor, SRLowFloor, SRAccessibleRoom, SRMediumFloor,
SRBathtub, SRShower, SRCrib, SRKingSizeBed, SRTwinBed,
SRNearElevator, SRAwayFromElevator, SRNoAlcoholInMiniBar, SRQuietRoom),
names_to = "Variable",
values_to = "Value"
) %>%
group_by(Variable, Value) %>%
summarise(
Percentage = n() / nrow(hotel2) * 100
) %>%
pivot_wider(
names_from = Value,
values_from = Percentage,
names_prefix = "Count_"
)
## `summarise()` has grouped output by 'Variable'. You can override using the
## `.groups` argument.
## # A tibble: 13 × 3
## # Groups: Variable [13]
## Variable Count_0 Count_1
## <chr> <dbl> <dbl>
## 1 SRAccessibleRoom 100. 0.0325
## 2 SRAwayFromElevator 99.6 0.353
## 3 SRBathtub 99.8 0.240
## 4 SRCrib 99.1 0.899
## 5 SRHighFloor 95.5 4.50
## 6 SRKingSizeBed 64.8 35.2
## 7 SRLowFloor 99.9 0.123
## 8 SRMediumFloor 99.9 0.0801
## 9 SRNearElevator 100. 0.0411
## 10 SRNoAlcoholInMiniBar 100. 0.00433
## 11 SRQuietRoom 91.2 8.76
## 12 SRShower 99.8 0.171
## 13 SRTwinBed 87.4 12.6
library(ggplot2)
# Create a bar graph for DistributionChannel
ggplot(data = hotel2, aes(x = DistributionChannel)) +
geom_bar() +
labs(title = "Distribution of Distribution Channels", x = "Distribution Channel", y = "Frequency") +
theme_minimal()+
theme(panel.grid = element_blank())
# Create a bar graph for MarketSegment
ggplot(data = hotel2, aes(x = MarketSegment)) +
geom_bar() +
labs(title = "Distribution of Market Segments", x = "Market Segment", y = "Frequency") +
theme_minimal()+
theme(panel.grid = element_blank())
library(dplyr)
# Summarize total revenue by DistributionChannel and Nationality
revenue_by_channel_nationality <- hotel2 %>%
group_by(DistributionChannel, Nationality) %>%
summarise(TotalRevenue = sum(TotalRevenue))
## `summarise()` has grouped output by 'DistributionChannel'. You can override
## using the `.groups` argument.
# Arrange the data frame by TotalRevenue in descending order within each DistributionChannel
revenue_by_channel_nationality <- revenue_by_channel_nationality %>%
arrange(DistributionChannel, desc(TotalRevenue))
# View the sorted data frame
#print(revenue_by_channel_nationality)
# Select the top 10 highest revenues for each DistributionChannel
top_10_revenues <- revenue_by_channel_nationality %>%
group_by(DistributionChannel) %>%
top_n(10, TotalRevenue)
# View the sorted data frame of the top 10 highest revenues
#print(top_10_revenues)
average_revenues <- top_10_revenues %>%
group_by(DistributionChannel) %>%
summarize(AverageRevenue = mean(TotalRevenue))
# Arrange the data frame by AverageRevenue in descending order
sorted_average_revenues <- average_revenues %>%
arrange(desc(AverageRevenue))
# View the sorted data frame
print(sorted_average_revenues)
## # A tibble: 4 × 2
## DistributionChannel AverageRevenue
## <chr> <dbl>
## 1 Travel Agent/Operator 1056473.
## 2 Direct 171443.
## 3 Corporate 35178.
## 4 Electronic Distribution 9937.
library(dplyr)
# Select the top 10 highest revenues for each MarketSegment
# Summarize total revenue by DistributionChannel and Nationality
revenue_by_marketsegment_nationality <- hotel2 %>%
group_by(MarketSegment, Nationality) %>%
summarise(TotalRevenue = sum(TotalRevenue))
## `summarise()` has grouped output by 'MarketSegment'. You can override using the
## `.groups` argument.
# Arrange the data frame by TotalRevenue in descending order within each DistributionChannel
revenue_by_marketsegment_nationality <- revenue_by_marketsegment_nationality %>%
arrange(MarketSegment, desc(TotalRevenue))
# View the sorted data frame
#print(revenue_by_channel_nationality)
# Select the top 10 highest revenues for each DistributionChannel
top_10_revenues <- revenue_by_marketsegment_nationality %>%
group_by(MarketSegment) %>%
top_n(10, TotalRevenue)
# View the sorted data frame of the top 10 highest revenues
#print(top_10_revenues)
top_10_revenues <- revenue_by_marketsegment_nationality %>%
group_by(MarketSegment) %>%
top_n(10, TotalRevenue)
# View the sorted data frame of the top 10 highest revenues
#print(top_10_revenues)
selected_variables <- c("TotalRevenue", "Age", "DaysSinceCreation", "AverageLeadTime",
"LodgingRevenue", "OtherRevenue", "BookingsCanceled",
"BookingsNoShowed", "BookingsCheckedIn", "PersonsNights",
"RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay",
"RatePerNight")
# Calculate the correlation matrix
cor_matrix <- cor(hotel2[, selected_variables])
# Print the correlation matrix
print(cor_matrix)
## TotalRevenue Age DaysSinceCreation AverageLeadTime
## TotalRevenue 1.000000000 0.026408375 -1.187381e-01 0.13818874
## Age 0.026408375 1.000000000 3.787487e-02 0.13552778
## DaysSinceCreation -0.118738090 0.037874865 1.000000e+00 -0.06271305
## AverageLeadTime 0.138188742 0.135527779 -6.271305e-02 1.00000000
## LodgingRevenue 0.978291270 -0.003719790 -1.507181e-01 0.11370375
## OtherRevenue 0.598853294 0.130029626 6.244148e-02 0.16578397
## BookingsCanceled -0.007050532 0.008092166 7.669014e-05 -0.02087861
## BookingsNoShowed -0.001933558 0.007954741 7.501055e-03 -0.01564573
## BookingsCheckedIn 0.052823769 0.021481253 -8.427305e-03 -0.05915103
## PersonsNights 0.649164866 0.027906931 3.919000e-02 0.24866457
## RoomNights 0.676025722 0.039587580 -4.705411e-03 0.20943061
## DaysSinceLastStay -0.116304006 0.037479255 9.962052e-01 -0.05725979
## DaysSinceFirstStay -0.115886718 0.038029599 9.997640e-01 -0.06179726
## RatePerNight 0.464754525 -0.043449751 -1.453925e-01 -0.09161002
## LodgingRevenue OtherRevenue BookingsCanceled
## TotalRevenue 0.978291270 0.598853294 -7.050532e-03
## Age -0.003719790 0.130029626 8.092166e-03
## DaysSinceCreation -0.150718099 0.062441477 7.669014e-05
## AverageLeadTime 0.113703750 0.165783967 -2.087861e-02
## LodgingRevenue 1.000000000 0.419887287 -7.046156e-03
## OtherRevenue 0.419887287 1.000000000 -3.647651e-03
## BookingsCanceled -0.007046156 -0.003647651 1.000000e+00
## BookingsNoShowed -0.001474648 -0.002769165 7.213181e-02
## BookingsCheckedIn 0.053714281 0.023760733 1.417454e-01
## PersonsNights 0.597306785 0.534699534 -1.359460e-02
## RoomNights 0.646485843 0.462283043 1.329818e-03
## DaysSinceLastStay -0.148416131 0.064205495 -9.476939e-03
## DaysSinceFirstStay -0.148015026 0.064482924 2.281001e-03
## RatePerNight 0.514362475 0.047619869 -8.138870e-03
## BookingsNoShowed BookingsCheckedIn PersonsNights
## TotalRevenue -1.933558e-03 0.052823769 0.649164866
## Age 7.954741e-03 0.021481253 0.027906931
## DaysSinceCreation 7.501055e-03 -0.008427305 0.039189995
## AverageLeadTime -1.564573e-02 -0.059151031 0.248664566
## LodgingRevenue -1.474648e-03 0.053714281 0.597306785
## OtherRevenue -2.769165e-03 0.023760733 0.534699534
## BookingsCanceled 7.213181e-02 0.141745404 -0.013594602
## BookingsNoShowed 1.000000e+00 0.088247506 -0.012436750
## BookingsCheckedIn 8.824751e-02 1.000000000 0.004986333
## PersonsNights -1.243675e-02 0.004986333 1.000000000
## RoomNights 9.239105e-05 0.079331682 0.821625241
## DaysSinceLastStay 1.113204e-03 -0.058703401 0.043688517
## DaysSinceFirstStay 7.444456e-03 -0.007748945 0.042722410
## RatePerNight -2.665032e-03 -0.010138284 -0.104983653
## RoomNights DaysSinceLastStay DaysSinceFirstStay
## TotalRevenue 6.760257e-01 -0.116304006 -0.1158867175
## Age 3.958758e-02 0.037479255 0.0380295993
## DaysSinceCreation -4.705411e-03 0.996205219 0.9997640330
## AverageLeadTime 2.094306e-01 -0.057259790 -0.0617972571
## LodgingRevenue 6.464858e-01 -0.148416131 -0.1480150261
## OtherRevenue 4.622830e-01 0.064205495 0.0644829244
## BookingsCanceled 1.329818e-03 -0.009476939 0.0022810014
## BookingsNoShowed 9.239105e-05 0.001113204 0.0074444561
## BookingsCheckedIn 7.933168e-02 -0.058703401 -0.0077489453
## PersonsNights 8.216252e-01 0.043688517 0.0427224103
## RoomNights 1.000000e+00 -0.003814850 -0.0004645289
## DaysSinceLastStay -3.814850e-03 1.000000000 0.9961856675
## DaysSinceFirstStay -4.645289e-04 0.996185668 1.0000000000
## RatePerNight -2.105950e-01 -0.144004837 -0.1463024751
## RatePerNight
## TotalRevenue 0.464754525
## Age -0.043449751
## DaysSinceCreation -0.145392461
## AverageLeadTime -0.091610016
## LodgingRevenue 0.514362475
## OtherRevenue 0.047619869
## BookingsCanceled -0.008138870
## BookingsNoShowed -0.002665032
## BookingsCheckedIn -0.010138284
## PersonsNights -0.104983653
## RoomNights -0.210594995
## DaysSinceLastStay -0.144004837
## DaysSinceFirstStay -0.146302475
## RatePerNight 1.000000000
library(corrplot)
## corrplot 0.92 loaded
# Visualize the correlation matrix with a heatmap
corrplot(cor_matrix, method = "color", col = colorRampPalette(c("red", "white", "blue"))(100), tl.col = "black")
Remove RatePerNight = $0
#hotel3 <- hotel3[hotel3$RatePerNight != 0.00, ]
str(hotel2)
## tibble [46,179 × 33] (S3: tbl_df/tbl/data.frame)
## $ ...1 : num [1:46179] 1 2 3 4 5 6 7 8 9 10 ...
## $ ID : num [1:46179] 32375 74084 37550 34105 19601 ...
## $ Nationality : chr [1:46179] "GBR" "DEU" "ESP" "ESP" ...
## $ Age : num [1:46179] 25 39 45 43 50 43 29 41 40 54 ...
## $ DaysSinceCreation : num [1:46179] 536 94 459 509 754 238 625 598 92 941 ...
## $ AverageLeadTime : num [1:46179] 48 36 20 129 50 69 64 2 136 2 ...
## $ LodgingRevenue : num [1:46179] 213 157 124 560 238 ...
## $ OtherRevenue : num [1:46179] 41.5 50 11 68 60 56 46 84.3 14 7 ...
## $ BookingsCanceled : num [1:46179] 0 0 0 0 0 0 0 0 0 0 ...
## $ BookingsNoShowed : num [1:46179] 0 0 0 0 0 0 0 0 0 0 ...
## $ BookingsCheckedIn : num [1:46179] 1 1 1 1 1 1 1 1 1 1 ...
## $ PersonsNights : num [1:46179] 6 4 1 12 4 8 4 3 2 1 ...
## $ RoomNights : num [1:46179] 3 2 1 4 4 4 2 3 2 1 ...
## $ DaysSinceLastStay : num [1:46179] 539 96 460 513 758 242 627 601 94 942 ...
## $ DaysSinceFirstStay : num [1:46179] 539 96 460 513 758 242 627 601 94 942 ...
## $ DistributionChannel : chr [1:46179] "Travel Agent/Operator" "Travel Agent/Operator" "Electronic Distribution" "Direct" ...
## $ MarketSegment : chr [1:46179] "Travel Agent/Operator" "Other" "Other" "Direct" ...
## $ SRHighFloor : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ SRLowFloor : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ SRAccessibleRoom : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ SRMediumFloor : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ SRBathtub : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ SRShower : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ SRCrib : Factor w/ 2 levels "0","1": 1 1 1 2 1 1 1 1 1 1 ...
## $ SRKingSizeBed : Factor w/ 2 levels "0","1": 1 2 1 2 1 1 2 2 2 1 ...
## $ SRTwinBed : Factor w/ 2 levels "0","1": 1 1 1 1 1 2 1 1 1 1 ...
## $ SRNearElevator : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ SRAwayFromElevator : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ SRNoAlcoholInMiniBar: Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ SRQuietRoom : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 2 2 1 1 ...
## $ TotalRevenue : num [1:46179] 255 207 135 628 298 ...
## $ RatePerNight : num [1:46179] 71.1 78.4 124 140 59.5 ...
## $ AgeGroups : Factor w/ 4 levels "Under 30","31-45",..: 1 2 2 2 3 2 1 2 2 3 ...
## - attr(*, "na.action")= 'omit' Named int [1:3598] 77 89 100 114 133 180 186 242 273 283 ...
## ..- attr(*, "names")= chr [1:3598] "77" "89" "100" "114" ...
#hotel3 <- hotel2[hotel2$TotalRevenue > 0, ]
hist(log(hotel2$TotalRevenue), main = "Distribution of Log(TotalRevenue)", xlab = "Log(TotalRevenue)")
set.seed(1)
train.rows <- sample(rownames(hotel2), dim(hotel2)[1]*0.6)
valid.rows <- sample(setdiff(rownames(hotel2), train.rows),
dim(hotel2)[1]*0.4)
train.hotel3 <- hotel2[train.rows, ]
valid.hotel3 <- hotel2[valid.rows, ]
selected_variables <- c("TotalRevenue", "Age", "DaysSinceCreation", "AverageLeadTime", "LodgingRevenue", "OtherRevenue", "BookingsCanceled", "BookingsCheckedIn", "PersonsNights", "RoomNights", "DaysSinceLastStay", "DaysSinceFirstStay", "RatePerNight")
cor_matrix <- cor(train.hotel3[, selected_variables])
# Print the correlation matrix
print(cor_matrix)
## TotalRevenue Age DaysSinceCreation AverageLeadTime
## TotalRevenue 1.000000000 0.026833562 -0.1148767344 0.14309133
## Age 0.026833562 1.000000000 0.0340138919 0.13511647
## DaysSinceCreation -0.114876734 0.034013892 1.0000000000 -0.06567201
## AverageLeadTime 0.143091325 0.135116475 -0.0656720098 1.00000000
## LodgingRevenue 0.978322644 -0.005767266 -0.1469743289 0.11705198
## OtherRevenue 0.597479601 0.140017648 0.0652950957 0.17431318
## BookingsCanceled -0.005825823 0.010195753 -0.0041250812 -0.02382803
## BookingsCheckedIn 0.054863829 0.023755137 -0.0115896062 -0.05678203
## PersonsNights 0.648995666 0.027924973 0.0413056216 0.25283014
## RoomNights 0.675788907 0.041217075 0.0008021354 0.21487713
## DaysSinceLastStay -0.112350498 0.033663371 0.9961801037 -0.06014047
## DaysSinceFirstStay -0.111968627 0.034173482 0.9996119603 -0.06474036
## RatePerNight 0.463421422 -0.046917607 -0.1471352929 -0.09188015
## LodgingRevenue OtherRevenue BookingsCanceled
## TotalRevenue 0.978322644 0.597479601 -0.0058258228
## Age -0.005767266 0.140017648 0.0101957533
## DaysSinceCreation -0.146974329 0.065295096 -0.0041250812
## AverageLeadTime 0.117051979 0.174313184 -0.0238280261
## LodgingRevenue 1.000000000 0.418468477 -0.0061053912
## OtherRevenue 0.418468477 1.000000000 -0.0019092437
## BookingsCanceled -0.006105391 -0.001909244 1.0000000000
## BookingsCheckedIn 0.055559947 0.025479255 0.1393421178
## PersonsNights 0.597591303 0.532334264 -0.0150990852
## RoomNights 0.646225817 0.461519481 -0.0027112515
## DaysSinceLastStay -0.144586314 0.067127644 -0.0142132819
## DaysSinceFirstStay -0.144228923 0.067418541 -0.0006488449
## RatePerNight 0.513317823 0.044775720 -0.0045020041
## BookingsCheckedIn PersonsNights RoomNights
## TotalRevenue 0.054863829 0.648995666 0.6757889070
## Age 0.023755137 0.027924973 0.0412170753
## DaysSinceCreation -0.011589606 0.041305622 0.0008021354
## AverageLeadTime -0.056782034 0.252830136 0.2148771301
## LodgingRevenue 0.055559947 0.597591303 0.6462258167
## OtherRevenue 0.025479255 0.532334264 0.4615194811
## BookingsCanceled 0.139342118 -0.015099085 -0.0027112515
## BookingsCheckedIn 1.000000000 0.007429534 0.0805870549
## PersonsNights 0.007429534 1.000000000 0.8216919395
## RoomNights 0.080587055 0.821691940 1.0000000000
## DaysSinceLastStay -0.061875476 0.045676763 0.0019881737
## DaysSinceFirstStay -0.010220747 0.044904483 0.0051263462
## RatePerNight -0.008331812 -0.106595762 -0.2123932611
## DaysSinceLastStay DaysSinceFirstStay RatePerNight
## TotalRevenue -0.112350498 -0.1119686269 0.463421422
## Age 0.033663371 0.0341734821 -0.046917607
## DaysSinceCreation 0.996180104 0.9996119603 -0.147135293
## AverageLeadTime -0.060140475 -0.0647403554 -0.091880147
## LodgingRevenue -0.144586314 -0.1442289227 0.513317823
## OtherRevenue 0.067127644 0.0674185407 0.044775720
## BookingsCanceled -0.014213282 -0.0006488449 -0.004502004
## BookingsCheckedIn -0.061875476 -0.0102207466 -0.008331812
## PersonsNights 0.045676763 0.0449044831 -0.106595762
## RoomNights 0.001988174 0.0051263462 -0.212393261
## DaysSinceLastStay 1.000000000 0.9961272169 -0.145819413
## DaysSinceFirstStay 0.996127217 1.0000000000 -0.148066255
## RatePerNight -0.145819413 -0.1480662553 1.000000000
# model_1 <- aov(TotalRevenue ~ DistributionChannel, data = hotel2)
# Perform Tukey's HSD post hoc analysis
# tukey_results_1 <- TukeyHSD(model_1)
# Print the results
# print(tukey_results_1)
model_2 <- aov(TotalRevenue ~ MarketSegment, data = hotel2)
# Perform Tukey's HSD post hoc analysis
tukey_results_2 <- TukeyHSD(model_2)
# Print the results
print(tukey_results_2)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = TotalRevenue ~ MarketSegment, data = hotel2)
##
## $MarketSegment
## diff lwr upr p adj
## Complementary-Aviation -19.886071 -140.334512 100.562369 0.9990241
## Corporate-Aviation -74.478842 -123.443458 -25.514226 0.0001483
## Direct-Aviation 26.203216 -20.908204 73.314636 0.6562968
## Groups-Aviation -11.359875 -58.512022 35.792272 0.9920329
## Other-Aviation 49.367326 2.745608 95.989043 0.0297514
## Travel Agent/Operator-Aviation -27.779502 -74.858662 19.299658 0.5891471
## Corporate-Complementary -54.592771 -166.770666 57.585124 0.7829501
## Direct-Complementary 46.089287 -65.292185 157.470760 0.8866594
## Groups-Complementary 8.526196 -102.872509 119.924901 0.9999891
## Other-Complementary 69.253397 -41.921830 180.428624 0.5230854
## Travel Agent/Operator-Complementary -7.893431 -119.261262 103.474401 0.9999931
## Direct-Corporate 100.682058 83.490806 117.873310 0.0000000
## Groups-Corporate 63.118967 45.816417 80.421518 0.0000000
## Other-Corporate 123.846168 108.046238 139.646098 0.0000000
## Travel Agent/Operator-Corporate 46.699340 29.596692 63.801988 0.0000000
## Groups-Direct -37.563091 -48.578103 -26.548079 0.0000000
## Other-Direct 23.164110 14.703020 31.625200 0.0000000
## Travel Agent/Operator-Direct -53.982718 -64.680981 -43.284455 0.0000000
## Other-Groups 60.727201 52.042205 69.412196 0.0000000
## Travel Agent/Operator-Groups -16.419627 -27.295836 -5.543418 0.0001732
## Travel Agent/Operator-Other -77.146828 -85.426410 -68.867246 0.0000000
library(dplyr)
hotel2 <- hotel2 %>%
mutate(MarketSegmentCombined = ifelse(MarketSegment %in% c("Other", "Complementary"), "Other_Complementary", as.character(MarketSegment)))
library(ggplot2)
# Create a bar graph for DistributionChannel
ggplot(data = hotel2, aes(x = DistributionChannel)) +
geom_bar() +
labs(title = "Distribution of Distribution Channels", x = "Distribution Channel", y = "Frequency") +
theme_minimal() +
theme(panel.grid = element_blank())
# Create a bar graph for CombinedSegment
ggplot(data = hotel2, aes(x = MarketSegmentCombined)) +
geom_bar() +
labs(title = "Distribution of Combined Segments", x = "Combined Segment", y = "Frequency") +
theme_minimal() +
theme(panel.grid = element_blank())
# linear regression model
# Model 1: Include Customer Preferences - Characteristics of Room + Characteristic Customers ( Customer Types and Age Groups)
#reg1 <- lm(TotalRevenue ~ Age + AverageLeadTime + OtherRevenue + BookingsCanceled + BookingsCheckedIn + RoomNights + DaysSinceLastStay + SRLowFloor + SRMediumFloor + SRHighFloor + SRAccessibleRoom + SRBathtub + SRShower + SRCrib + SRKingSizeBed + SRTwinBed + SRNearElevator + SRAwayFromElevator + SRNoAlcoholInMiniBar + SRQuietRoom + RatePerNight + DistributionChannel + train.hotel3$MarketSegmentCombined, data = train.hotel3)
#summary (reg1)
#if (!requireNamespace("car", quietly = TRUE)) {
# install.packages("car")
#}
#library(car)
# Calculate VIF values
#vif_values <- vif(reg1)
# Print the VIF values
#print(vif_values)
#pred_t <- predict(reg1, na.action=na.pass)
#pred_v <- predict(reg1, newdata= valid.hotel3,
# na.action=na.pass)
#summary_reg1 <- summary(reg1)
# Extract variable names with significance codes
#significant_variables <- rownames(summary_reg1$coefficients[summary_reg1$coefficients[, "Pr(>|t|)"] < 0.05, ])
# Filter coefficients data frame
#df_significant_coefficients <- df_coefficients[df_coefficients$variable %in% significant_variables, ]
# Create a bar chart for significant coefficients
#bar_chart_significant <- ggplot(df_significant_coefficients, aes(x = variable, y = coefficient)) +
# geom_bar(stat = "identity", fill = "darkblue", position = "stack") +
# geom_text(aes(label = round(coefficient, 2)), vjust = -0.5, size = 3, color = "black") +
# labs(x = "Significant Variables", y = "Coefficient", title = "Linear Regression Coefficients with Significance") +
# theme_minimal() +
# theme(panel.grid.major.x = element_blank(),
# panel.grid.minor.x = element_blank(),
# panel.background = element_rect(fill = "white"),
# axis.text.x = element_text(angle = 45, hjust = 1))
# Display the bar chart for significant coefficients
#print(bar_chart_significant)
Predictions for a sample of validation data
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(ggplot2)
library(gridExtra)
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
library(gains)
## Evaluate performance training
#accuracy(pred_t, train.hotel3$TotalRevenue)
Compute accuracy on prediction set
## Evaluate performance validation
#accuracy(pred_v, valid.hotel3$TotalRevenue)
#hist(pred_t)
#hist(pred_v)
#boxplot(pred_t)
#boxplot(pred_v)
##Plotting residual histograms for training and validation data
#resid.t<-residuals(reg1)
#hist(resid.t)
#resid.v<- valid.hotel3$TotalRevenue-pred_v
#hist(resid.v)
#Plotting boxplots for both training and validation errors
#boxplot(resid.t,resid.v)
# Create a data frame with actual, predicted, and residuals for the trainning data
#tr.res <- data.frame(Actual = train.hotel3$TotalRevenue,
# Predicted = reg1$fitted.values,
# Residuals = reg1$residuals)
#head(tr.res)
# Create a data frame with actual, predicted, and residuals for the validation data
#vl.res <- data.frame(valid.hotel3$TotalRevenue, pred_v, residuals =
# valid.hotel3$TotalRevenue - pred_v)
#head(vl.res)
Cumulative Gains and Lift Charts
install.packages("forecast")
## Warning in download.file(url, destfile, method, mode = "wb", ...): downloaded
## length 0 != reported length 0
## Warning in download.file(url, destfile, method, mode = "wb", ...): URL
## 'https://cran.rstudio.com/bin/macosx/big-sur-x86_64/contrib/4.3/forecast_8.21.1.tgz':
## Timeout of 60 seconds was reached
## Error in download.file(url, destfile, method, mode = "wb", ...) :
## download from 'https://cran.rstudio.com/bin/macosx/big-sur-x86_64/contrib/4.3/forecast_8.21.1.tgz' failed
## Warning in download.packages(pkgs, destdir = tmpd, available = available, :
## download of package 'forecast' failed
library(forecast)
library(gains)
#gain <- gains(valid.hotel3$TotalRevenue[!is.na(pred_v)], pred_v[!is.na(pred_v)])
#gain
#library(gains)
# cumulative lift chart
#options(scipen=999)
#Hotel_TotalRevenue <- valid.hotel3$TotalRevenue [!is.na(valid.hotel3$TotalRevenue)]
# Plot cumulative lift chart
#plot(c(0, gain$cume.pct.of.total * sum(valid.hotel3$TotalRevenue[!is.na(valid.hotel3$TotalRevenue)])) ~ c(0, gain$cume.obs),
# xlab = "# cases", ylab = "Cumulative TotalRevenue", main = "Lift Chart", type = "l")
# Baseline
#lines(c(0, sum(valid.hotel3$TotalRevenue)) ~ c(0, dim(valid.hotel3)[1]), col = "red", lty = 2)
#library(ggplot2)
# Create a data frame for the Decile-wise lift chart
#df_decile <- data.frame(
# percentile = gain$depth,
# meanResponse = gain$mean.resp / mean(valid.hotel3$TotalRevenue)
#)
# Create the Decile-wise lift chart using ggplot2
#decile_lift_chart <- ggplot(df_decile, aes(x = percentile, y = meanResponse)) +
# geom_bar(stat = "identity", fill = "blue") + # Set bar color to blue
# geom_text(aes(label = round(meanResponse, 2)), vjust = -0.5, size = 3) +
# labs(x = "Percentile", y = "Decile mean / global mean", title = "Decile-wise Lift Chart") +
# scale_x_continuous(breaks = seq(0, 100, by = 10)) +
# theme_minimal() + # Remove other unnecessary elements
# theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) # Remove grid lines
# Display the Decile-wise lift chart
#print(decile_lift_chart)
# Baseline curve for random 1,975 customers:
#sum(valid.hotel3$TotalRevenue)/10
#valid.hotel3_sorteddata <- valid.hotel3[order(valid.hotel3$TotalRevenue, decreasing = TRUE), ]
# Select the top 2,317 customers
#top_customers <- head(valid.hotel3_sorteddata, 1870)
# Calculate the cumulative actual total revenue for the top 1870 customers
#cumulative_actual_total_revenue <- sum(top_customers$TotalRevenue)
#cumulative_actual_total_revenue
#length(hotel2$DistributionChannel)
#length(hotel2$MarketSegment)
library(ggplot2)
ggplot(train.hotel3, aes(RatePerNight, TotalRevenue, color = DistributionChannel, shape = DistributionChannel)) +
geom_point(alpha = 1.5) +
xlab("RatePerNight") +
ylab("TotalRevenue")
library(dplyr)
library(ggplot2)
# Box plot
ggplot(train.hotel3, aes(x = DistributionChannel, y = RatePerNight, fill = DistributionChannel)) +
geom_boxplot() +
ylab("RatePerNight") +
ggtitle("RatePerNight Distribution in Different Distribution Channels") +
theme_minimal()
library(ggplot2)
ggplot(train.hotel3, aes(x = DistributionChannel, y = TotalRevenue, fill = DistributionChannel)) +
geom_bar(stat = "identity") +
xlab("Distribution Channel") +
ylab("Total Revenue") +
labs(title = "Total Revenue by Distribution Channel") +
theme_minimal()
contingency_table <- table(hotel2$MarketSegmentCombined, hotel2$DistributionChannel)
# Print the contingency table
print(contingency_table)
##
## Corporate Direct Electronic Distribution
## Aviation 156 0 0
## Corporate 1131 31 1
## Direct 7 5801 2
## Groups 317 81 1
## Other_Complementary 25 57 430
## Travel Agent/Operator 82 12 4
##
## Travel Agent/Operator
## Aviation 4
## Corporate 297
## Direct 75
## Groups 5125
## Other_Complementary 26432
## Travel Agent/Operator 6108
library(ggplot2)
# Your data
data <- data.frame(
Segment = c("Aviation", "Corporate", "Direct", "Groups", "Other_Complementary", "Travel Agent/Operator"),
Corporate = c(156, 1133, 7, 318, 25, 82),
Direct = c(0, 31, 5915, 82, 58, 12),
Electronic_Distribution = c(0, 1, 2, 1, 430, 4),
Travel_Agent_Operator = c(4, 298, 75, 5153, 26813, 6169)
)
# Reshape data for ggplot2
data_long <- tidyr::gather(data, key = "Distribution_Channel", value = "Count", -Segment)
# Create a bar chart with larger font size
ggplot(data_long, aes(x = Segment, y = log(Count + 1), fill = Distribution_Channel)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.8)) +
labs(title = "Distribution of Segments by Distribution Channel (Log Scale)", x = "Segment", y = "Log(Count + 1)") +
theme_minimal() +
theme(text = element_text(size = ))
#library(tibble)
#numberofclusters <- 10
#sserror <- numeric(numberofclusters)
#set.seed(123)
#for (i in 1:numberofclusters) {
# kmeans_out <- kmeans(train.hotel3_columns, centers = i, nstart = 20)
# sserror[i] <- kmeans_out$tot.withinss
#}
#sserror_df <- tibble(clusters = 1:numberofclusters, wss = sserror)
#scree_plot <- ggplot(sserror_df, aes(x = clusters, y = wss, group = 1)) +
# geom_point(size = 4) +
# geom_line() +
# scale_x_continuous(breaks = c(2, 4, 6, 8, 10)) +
# xlab('Number of clusters') +
# ylab('Total Within Sum of Squares Error')
#scree_plot
Normalization
#train.hotel3[, c("RatePerNight", "AverageLeadTime")] = scale(train.hotel3[, c("RatePerNight", "AverageLeadTime")])
Fitting and evaluating the model
train.hotel3_columns <- train.hotel3[, c("AverageLeadTime", "PersonsNights", "RoomNights", "RatePerNight", "OtherRevenue", "TotalRevenue")]
set.seed(123)
kmeans_out <- kmeans(train.hotel3_columns, centers = 3, nstart = 20)
kmeans_out
## K-means clustering with 3 clusters of sizes 3975, 12141, 11591
##
## Cluster means:
## AverageLeadTime PersonsNights RoomNights RatePerNight OtherRevenue
## 1 76.54164 8.110692 3.916981 187.9975 101.61276
## 2 57.74327 3.223787 1.827938 101.9453 30.49785
## 3 83.58580 6.472522 3.309896 117.8939 73.33603
## TotalRevenue
## 1 741.1210
## 2 200.1372
## 3 429.3238
##
## Clustering vector:
## [1] 2 3 3 3 2 1 1 3 3 2 1 3 2 2 2 3 2 2 2 3 3 1 3 2 2 2 3 3 3 1 3 3 2 3 2 1
## [37] 2 3 2 3 3 3 3 2 2 3 2 2 3 3 2 2 3 2 2 2 3 3 2 3 2 3 3 2 2 3 3 1 3 3 1 2
## [73] 3 2 3 2 2 2 3 3 2 3 3 3 3 3 1 2 2 2 3 3 3 2 3 3 2 3 1 3 1 3 1 1 3 3 2 2
## [109] 2 3 1 3 2 2 3 2 2 2 2 2 1 3 2 2 1 2 2 3 3 2 1 2 3 2 2 3 2 3 2 3 2 3 3 1
## [145] 3 3 3 1 3 3 3 1 3 1 3 1 3 3 3 2 1 3 3 3 2 2 3 2 2 3 2 3 2 3 3 2 3 3 2 2
## [181] 1 2 3 2 3 3 2 2 2 3 3 2 2 3 3 2 3 2 3 2 3 3 3 1 3 2 1 2 2 3 2 2 2 3 2 2
## [217] 2 2 2 2 2 1 2 1 2 3 3 2 3 3 2 3 3 3 3 2 2 3 2 2 2 1 2 2 3 2 2 2 2 3 2 3
## [253] 1 3 3 2 2 2 2 1 1 3 2 3 1 2 1 2 3 2 2 2 2 2 3 3 3 2 3 3 1 2 2 1 3 2 1 3
## [289] 2 3 3 3 3 3 2 2 2 2 2 3 2 1 2 1 2 3 2 3 1 1 3 2 3 3 2 2 1 1 2 1 2 2 3 2
## [325] 2 2 3 3 3 1 3 3 3 2 1 3 2 2 2 3 2 2 1 2 1 2 3 3 2 2 2 2 2 3 3 3 2 3 1 3
## [361] 2 3 2 1 3 2 2 2 2 2 2 1 1 2 3 2 3 3 3 3 2 2 2 3 3 1 3 3 2 2 2 2 3 3 2 1
## [397] 2 2 3 2 2 3 3 1 2 3 3 2 3 2 1 2 3 2 2 2 2 3 2 2 3 1 3 3 1 2 3 2 2 3 2 2
## [433] 2 2 3 2 3 2 2 3 2 2 2 3 1 2 2 3 3 3 1 2 3 2 2 2 2 1 2 2 2 2 3 1 3 3 2 2
## [469] 2 3 1 1 2 2 3 3 3 3 3 2 3 1 3 2 2 3 2 3 3 2 3 3 2 2 3 3 3 2 3 2 3 2 3 3
## [505] 2 2 2 2 3 2 2 3 2 2 3 2 1 3 3 3 2 2 3 2 2 2 3 2 2 1 2 2 2 2 3 2 3 1 3 1
## [541] 2 3 2 2 2 1 2 2 3 1 2 2 2 1 3 2 3 2 2 2 2 2 2 3 2 2 2 2 3 3 2 1 1 1 2 1
## [577] 2 2 2 1 3 2 3 1 3 3 3 3 3 2 3 2 3 3 2 2 2 2 1 2 2 2 3 3 3 1 2 3 3 2 3 2
## [613] 2 3 2 1 3 2 1 2 2 3 2 1 2 3 2 3 3 2 3 3 2 2 2 2 2 2 2 3 3 1 1 3 3 2 3 2
## [649] 2 2 2 2 3 2 2 2 2 2 3 2 2 2 3 2 2 2 2 1 1 2 3 3 2 1 3 2 3 2 2 2 3 1 2 2
## [685] 1 1 2 3 2 3 3 3 3 2 3 3 3 3 1 2 3 3 2 2 2 2 3 2 3 3 2 3 2 3 2 1 2 3 2 3
## [721] 2 3 3 2 1 1 2 3 1 2 1 3 2 2 3 2 3 2 3 2 2 3 3 2 1 3 2 3 2 3 3 3 3 2 3 3
## [757] 3 3 1 3 2 1 2 3 2 3 2 2 3 3 2 2 3 1 3 2 3 2 2 2 3 2 3 2 2 1 1 3 1 2 3 2
## [793] 3 2 3 3 3 2 3 3 3 3 3 2 2 2 3 2 2 3 2 3 2 1 2 3 2 1 2 2 1 3 2 2 2 1 3 2
## [829] 1 2 1 3 3 2 3 3 1 3 3 1 3 3 2 3 3 3 3 2 2 3 3 2 3 2 2 2 1 1 2 2 2 2 3 2
## [865] 3 1 1 3 2 2 2 2 1 3 2 2 2 1 3 2 2 2 1 2 3 2 2 1 1 2 2 2 3 1 3 2 2 3 3 2
## [901] 2 3 2 3 3 3 3 1 3 1 1 2 2 3 1 1 2 3 2 3 3 3 3 2 2 3 2 2 2 3 2 1 3 3 2 3
## [937] 2 3 3 1 2 3 3 1 3 2 2 3 2 2 3 2 3 2 3 1 3 2 2 1 3 3 2 3 3 2 2 3 3 2 2 2
## [973] 3 1 2 2 2 2 1 2 3 2 2 3 1 2 1 3 3 3 3 2 3 1 2 2 3 2 3 2 1 2 1 3 1 1 3 1
## [1009] 3 3 1 2 3 3 3 3 3 3 3 2 1 2 1 2 1 2 3 2 1 2 3 3 2 3 2 3 2 3 3 1 3 2 2 1
## [1045] 2 3 2 3 3 3 2 2 2 3 3 2 3 2 3 2 3 1 2 2 1 2 2 3 3 2 1 2 3 3 1 1 3 2 3 3
## [1081] 2 2 1 2 2 3 2 3 3 3 1 2 2 3 2 3 2 2 2 2 3 2 3 2 2 1 2 2 3 3 1 1 2 2 3 3
## [1117] 3 1 3 2 2 3 3 3 2 2 3 3 2 2 2 3 3 2 2 2 2 2 2 2 3 2 2 3 3 2 2 2 3 3 3 1
## [1153] 2 3 3 3 2 2 2 2 1 2 3 3 2 2 2 2 3 3 3 1 3 2 2 3 3 2 1 2 2 3 2 3 1 1 2 2
## [1189] 3 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 2 2 3 3 1 3 3 3 2 1 3 3 3 3 3 2 2 3
## [1225] 2 1 1 2 3 3 2 2 1 3 3 1 3 2 3 3 2 2 1 3 2 3 1 3 1 2 2 2 2 3 3 3 2 1 3 3
## [1261] 2 2 3 2 2 2 2 2 2 3 2 1 3 3 2 2 3 2 1 3 1 3 3 1 3 1 2 1 3 3 1 2 3 1 2 2
## [1297] 3 2 3 3 1 2 3 1 3 1 3 3 2 2 1 1 1 3 2 3 3 1 1 2 3 2 3 2 2 2 2 2 2 2 2 2
## [1333] 3 2 2 1 2 1 2 2 1 3 3 2 2 2 2 2 3 2 2 2 1 2 2 3 3 3 2 3 2 2 2 3 3 2 3 1
## [1369] 3 3 3 2 3 1 2 2 2 2 3 2 1 1 2 3 2 2 2 2 2 2 2 1 2 2 3 2 3 1 1 3 2 3 1 3
## [1405] 1 2 3 3 3 2 1 2 1 3 1 3 3 1 2 3 3 2 2 2 1 2 2 2 2 1 2 2 3 3 1 3 2 2 2 2
## [1441] 3 2 3 1 2 3 1 2 2 3 3 2 3 2 3 2 2 1 2 2 3 3 2 3 3 2 3 2 2 2 3 3 1 3 2 2
## [1477] 2 3 2 2 2 3 1 1 3 2 2 3 3 3 3 3 2 2 3 2 2 2 2 2 3 1 3 2 2 2 1 2 2 3 1 2
## [1513] 3 1 3 3 3 3 3 3 2 2 3 2 2 2 1 3 3 2 1 2 3 3 2 3 3 1 2 1 2 2 3 2 1 3 2 3
## [1549] 3 3 3 3 2 3 3 3 2 2 2 3 2 3 3 2 1 3 3 3 3 1 2 3 3 3 2 3 3 3 2 3 2 1 3 3
## [1585] 3 2 3 2 3 3 2 2 2 2 3 2 2 3 2 2 2 2 2 2 3 3 2 3 3 3 2 1 2 3 2 3 3 3 3 3
## [1621] 1 2 2 3 1 3 2 2 3 2 3 2 2 3 1 3 2 2 3 2 2 2 2 2 3 2 2 1 3 2 3 2 3 3 3 3
## [1657] 3 3 3 2 2 2 3 3 2 1 3 2 1 3 2 2 1 3 3 3 3 2 2 2 3 2 2 3 2 2 2 3 2 3 2 2
## [1693] 3 2 3 2 2 2 3 3 3 3 2 1 2 3 3 1 1 3 2 2 3 2 3 2 1 3 1 3 2 3 3 3 3 3 2 2
## [1729] 2 3 1 2 1 3 2 1 1 2 3 3 3 3 2 2 2 2 2 3 1 2 2 2 3 2 2 3 2 3 2 2 2 2 3 3
## [1765] 2 3 3 3 3 1 3 3 2 1 3 2 3 2 3 3 1 3 3 3 3 2 3 2 2 2 2 3 2 1 2 2 2 2 2 3
## [1801] 2 3 3 3 3 3 3 2 3 3 3 3 2 2 1 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 2 2 1 3 3 3
## [1837] 3 2 3 3 2 3 3 3 2 3 2 2 3 3 2 3 1 1 2 3 1 1 2 1 3 1 2 3 2 1 2 1 3 3 3 2
## [1873] 3 3 3 3 3 1 3 3 1 3 3 1 3 3 2 2 3 3 3 2 2 1 2 3 2 1 2 3 2 3 2 3 2 1 3 2
## [1909] 3 2 1 3 2 3 2 1 1 3 2 3 2 2 2 2 3 2 3 3 3 2 3 2 2 2 2 3 1 1 2 2 3 2 3 1
## [1945] 3 2 3 2 2 3 2 2 2 3 3 1 3 3 3 1 3 3 1 2 2 1 2 2 3 2 3 3 2 2 1 3 3 1 3 2
## [1981] 3 2 3 3 3 2 3 3 1 2 3 2 3 3 3 2 3 2 2 2 2 3 1 3 2 2 2 2 3 2 3 3 3 3 3 3
## [2017] 2 2 2 3 2 3 1 2 1 2 3 2 1 2 3 3 2 2 2 3 1 3 2 1 1 3 3 2 2 1 3 2 1 3 1 3
## [2053] 2 2 3 3 2 2 2 3 2 2 3 1 3 1 3 3 3 3 2 3 2 2 2 2 2 2 2 2 3 2 2 2 2 1 3 2
## [2089] 3 3 1 1 2 3 2 1 2 3 3 3 2 2 3 2 3 2 2 3 2 2 3 3 3 1 3 1 1 2 2 2 2 1 3 2
## [2125] 3 3 2 2 2 3 3 3 3 2 2 2 3 2 1 3 3 2 2 2 2 2 2 3 2 3 2 2 1 3 2 3 3 1 3 2
## [2161] 3 1 3 3 3 3 1 2 3 3 2 3 3 3 1 3 3 1 3 2 2 3 1 2 2 2 3 2 2 1 1 3 3 1 3 2
## [2197] 3 1 2 3 2 3 3 3 3 3 3 3 1 2 2 2 1 2 3 2 3 2 3 2 2 2 3 3 2 2 3 3 3 3 2 3
## [2233] 2 3 3 2 2 1 2 2 2 3 3 3 2 3 3 1 2 2 3 1 2 2 2 3 2 3 2 3 2 3 3 3 1 2 2 3
## [2269] 3 3 3 1 2 2 2 3 3 1 3 1 2 1 2 1 3 3 3 2 2 1 3 1 3 1 3 3 2 2 3 3 1 3 2 1
## [2305] 2 3 2 3 3 2 3 3 3 2 2 2 3 2 3 1 1 3 3 2 1 3 2 2 2 2 3 2 2 2 3 1 1 2 2 3
## [2341] 3 2 2 3 2 2 3 3 2 3 2 2 3 1 3 2 1 1 3 2 2 3 3 1 2 3 3 3 2 1 3 2 2 2 2 3
## [2377] 1 3 1 2 3 2 2 2 2 2 3 2 3 1 2 2 3 3 2 3 1 1 3 3 3 2 3 2 2 3 2 3 3 3 3 2
## [2413] 3 2 3 2 2 3 2 2 2 2 2 2 3 2 3 3 3 3 2 3 3 3 3 3 1 2 1 3 1 2 2 1 3 3 3 3
## [2449] 1 2 3 3 2 2 3 3 2 2 2 3 2 3 3 3 1 3 3 3 2 3 3 3 2 2 2 2 3 3 2 1 2 3 2 3
## [2485] 3 1 2 2 2 3 1 1 2 3 2 2 3 2 2 2 2 3 2 3 3 2 3 2 1 3 2 2 2 3 3 3 3 2 3 2
## [2521] 3 3 3 2 2 2 3 2 1 2 3 3 1 2 3 3 1 3 3 1 3 1 3 2 2 3 3 3 2 3 2 3 1 2 3 2
## [2557] 2 3 2 2 3 2 2 1 3 3 3 2 2 2 1 3 3 2 3 2 3 1 3 2 3 3 3 1 1 2 1 2 2 2 2 2
## [2593] 2 1 2 2 3 3 2 2 2 1 3 2 2 3 1 3 2 1 3 2 3 2 1 2 3 3 1 3 1 2 3 1 3 1 3 2
## [2629] 2 2 1 2 2 2 3 2 2 3 2 3 2 1 2 1 3 2 3 3 3 2 1 3 2 3 1 2 2 2 2 3 2 2 2 3
## [2665] 3 2 3 2 3 3 3 2 3 3 2 1 1 3 2 2 1 3 3 3 2 3 1 2 1 1 2 2 2 3 3 3 2 2 2 1
## [2701] 2 2 3 2 2 3 3 2 2 1 3 3 1 3 3 2 2 3 2 3 3 2 3 1 3 3 3 3 2 2 2 2 3 3 2 2
## [2737] 3 3 3 2 2 2 3 2 1 2 2 2 1 2 3 1 2 2 3 2 2 2 1 1 3 3 2 3 3 3 3 3 3 3 2 1
## [2773] 2 1 3 2 2 3 3 1 2 3 2 3 1 3 3 1 3 3 1 2 1 3 3 2 2 2 2 2 2 2 2 2 2 3 2 3
## [2809] 3 3 2 2 3 3 2 3 2 2 2 2 3 3 2 3 2 2 3 1 2 2 2 2 3 1 2 2 3 2 3 2 2 3 3 1
## [2845] 2 3 2 3 3 2 1 1 2 3 3 2 2 3 2 2 3 3 2 3 2 2 2 2 3 3 2 2 2 2 2 1 2 3 1 2
## [2881] 2 2 3 3 1 1 3 2 3 2 2 3 3 1 2 2 2 2 2 2 2 1 2 2 3 1 2 2 2 2 3 2 3 2 3 2
## [2917] 1 3 3 2 2 2 1 2 2 2 3 1 2 2 2 1 2 2 2 2 1 2 3 3 2 2 2 2 3 3 2 3 2 3 3 3
## [2953] 3 3 3 2 3 3 2 3 2 1 2 3 2 3 1 2 3 1 2 3 2 3 3 1 3 2 3 2 3 1 1 3 3 3 3 2
## [2989] 2 3 2 3 2 3 3 2 3 3 3 3 2 2 3 3 1 1 2 2 2 3 2 3 2 3 2 3 3 3 2 1 3 3 3 2
## [3025] 3 2 3 3 2 3 1 2 3 2 2 3 2 3 1 3 2 2 3 3 2 3 2 3 3 3 3 3 3 2 3 3 3 1 2 2
## [3061] 3 3 2 3 3 3 2 3 3 2 1 3 3 3 3 2 3 2 3 2 2 2 2 3 2 1 2 1 1 1 1 3 2 2 1 1
## [3097] 2 3 3 2 3 2 2 3 2 1 2 2 3 2 3 3 2 2 1 2 2 1 1 3 2 2 2 2 2 2 1 3 1 2 3 2
## [3133] 2 3 2 3 3 1 2 3 2 2 3 3 3 2 3 1 3 3 2 2 3 3 2 3 3 2 2 3 3 2 1 3 2 2 3 1
## [3169] 1 2 1 2 2 2 3 2 3 3 2 2 2 3 3 3 2 3 3 3 3 3 3 2 3 2 3 3 3 2 3 2 2 2 2 1
## [3205] 2 3 1 3 3 3 3 3 2 1 2 3 3 3 2 2 2 3 2 2 3 2 3 2 2 3 3 2 2 3 2 2 3 3 1 3
## [3241] 3 1 2 3 2 3 2 2 2 3 3 3 3 2 2 3 1 3 3 3 3 2 2 3 3 2 3 3 3 2 1 3 3 3 2 2
## [3277] 3 3 2 3 3 2 3 3 1 2 1 1 3 3 2 3 2 3 2 1 1 2 3 3 2 3 2 1 3 2 3 3 3 2 1 2
## [3313] 2 3 2 3 3 3 3 2 2 1 1 2 1 2 2 3 3 2 2 3 2 1 2 1 1 2 3 3 2 3 2 3 3 1 2 3
## [3349] 3 2 3 3 3 3 3 2 2 2 3 3 2 3 2 1 2 2 2 1 2 3 2 1 3 3 2 3 2 2 2 2 2 2 1 2
## [3385] 2 3 2 2 2 3 2 2 1 2 3 2 2 1 3 1 1 2 2 2 2 3 2 2 2 3 3 2 3 3 3 3 2 2 2 3
## [3421] 1 1 3 2 3 3 2 1 3 1 2 3 1 1 2 1 3 2 2 1 2 3 1 3 3 2 1 2 1 2 2 2 3 2 3 3
## [3457] 2 3 1 1 3 2 1 3 3 2 2 3 2 2 2 3 1 2 3 3 3 2 2 2 3 2 1 2 3 3 2 2 2 2 3 3
## [3493] 3 3 2 2 3 3 2 2 1 3 2 3 3 2 3 2 1 2 2 2 3 2 3 3 3 2 2 3 3 2 3 2 3 3 3 3
## [3529] 2 3 2 2 1 2 2 1 1 2 3 2 2 3 2 2 3 1 1 1 2 2 2 1 2 1 1 2 2 2 3 3 3 3 2 2
## [3565] 2 2 3 1 1 2 2 3 2 3 3 2 2 2 2 2 2 2 3 3 2 1 3 3 3 3 2 3 3 2 3 1 3 2 3 1
## [3601] 2 1 1 2 2 3 3 3 3 2 2 2 3 2 3 3 1 3 3 2 2 2 2 3 2 1 2 2 1 3 2 1 1 2 2 2
## [3637] 2 2 2 2 3 2 3 2 2 3 3 2 2 3 2 2 3 1 2 3 2 2 3 1 3 2 3 3 2 2 3 3 3 1 3 3
## [3673] 2 2 2 3 2 3 3 1 3 1 2 3 1 2 3 2 2 2 2 2 3 2 2 3 3 2 3 3 3 2 3 2 2 3 2 1
## [3709] 3 3 2 3 1 2 3 3 3 3 2 1 3 2 2 3 3 2 2 1 3 3 1 2 3 1 3 3 3 1 2 2 3 3 2 2
## [3745] 3 2 3 3 1 2 3 2 2 2 2 2 2 2 2 2 3 3 2 2 2 2 3 2 3 3 2 2 1 2 2 3 2 3 2 3
## [3781] 2 2 3 3 3 3 3 3 2 3 1 3 3 1 2 2 2 2 2 1 3 3 3 2 2 2 3 2 2 2 3 2 2 2 3 2
## [3817] 3 3 3 3 3 3 1 2 1 1 1 3 2 3 3 2 2 1 2 1 2 2 1 3 1 1 3 3 2 3 1 3 2 2 2 3
## [3853] 2 2 3 1 3 3 3 2 3 3 2 3 3 2 3 2 1 3 2 2 3 2 3 2 3 2 3 2 2 3 3 2 2 3 2 3
## [3889] 3 2 3 2 1 3 3 1 3 2 2 1 2 3 3 2 3 3 3 2 3 3 2 3 3 2 2 1 3 3 2 3 3 1 1 3
## [3925] 2 3 1 2 3 3 2 2 2 2 2 3 3 3 1 2 2 2 2 3 2 2 2 2 3 3 2 2 3 2 1 3 3 3 2 2
## [3961] 3 2 3 2 3 2 3 2 3 2 3 3 2 3 3 1 3 1 1 3 2 3 2 1 3 2 2 1 2 2 1 2 2 1 1 3
## [3997] 3 2 3 2 2 2 3 3 3 3 2 3 2 3 3 2 3 2 3 3 2 3 3 2 1 2 2 3 1 3 2 2 3 2 3 2
## [4033] 3 3 3 3 3 2 2 2 1 1 3 2 2 2 1 3 2 2 3 2 2 3 2 2 3 3 2 3 3 2 2 3 3 1 2 3
## [4069] 3 1 3 2 3 2 3 3 1 2 3 3 2 1 3 3 3 3 1 3 3 2 3 2 2 2 2 1 2 3 2 2 2 3 3 3
## [4105] 3 3 2 2 2 3 3 2 3 3 2 3 3 2 3 3 3 3 2 3 1 3 3 3 2 3 3 2 2 3 1 2 3 2 2 3
## [4141] 1 3 2 3 3 2 2 2 2 3 3 3 3 3 1 3 2 3 3 2 2 3 1 2 2 3 2 2 3 1 2 1 2 1 2 2
## [4177] 2 1 3 3 3 3 1 3 3 1 2 3 3 3 2 2 3 2 3 1 2 3 3 2 2 1 2 2 2 2 3 3 2 3 3 3
## [4213] 3 2 3 1 3 3 3 3 2 2 3 1 3 1 2 2 2 3 2 3 2 2 3 2 2 3 3 3 3 2 1 2 3 2 2 1
## [4249] 2 3 2 3 1 1 2 2 3 2 2 2 3 3 2 1 2 2 2 3 3 2 2 2 1 3 1 2 3 3 2 2 2 3 3 3
## [4285] 2 3 3 3 2 3 2 3 2 2 3 3 1 3 1 2 2 3 1 2 3 2 1 2 1 2 2 3 1 2 2 1 2 3 1 2
## [4321] 3 2 3 3 2 2 2 3 2 3 2 1 2 2 3 1 2 3 2 3 3 2 3 3 1 3 2 2 2 2 2 2 1 2 3 2
## [4357] 3 1 2 2 2 2 3 3 1 2 2 3 2 2 2 2 3 1 2 2 2 2 1 2 1 1 2 3 3 1 1 3 2 3 1 2
## [4393] 3 2 1 3 3 2 3 1 1 2 2 2 2 1 1 3 2 3 3 3 2 2 1 1 3 3 3 2 2 1 3 2 3 3 2 3
## [4429] 3 3 2 3 2 3 1 3 1 3 1 1 2 3 2 3 3 1 2 2 3 2 3 3 1 2 2 3 1 3 3 3 2 3 1 3
## [4465] 2 2 1 3 2 3 3 1 3 2 2 3 3 3 1 2 3 1 3 3 2 3 2 3 2 3 1 2 2 3 2 2 2 2 2 2
## [4501] 1 2 2 3 2 3 2 3 3 3 3 2 3 1 3 2 3 3 1 3 3 2 2 3 3 2 2 3 2 3 3 3 2 3 3 3
## [4537] 3 3 2 1 3 2 3 2 3 3 2 2 3 2 3 3 2 2 3 2 3 3 2 2 3 3 3 2 2 3 2 3 3 2 2 3
## [4573] 3 2 2 2 3 1 2 1 3 3 2 3 3 3 1 1 3 2 3 3 3 3 3 3 2 1 3 2 3 2 2 3 2 1 2 3
## [4609] 3 1 3 2 3 1 3 3 3 3 3 3 2 3 1 2 2 3 3 3 3 1 2 3 3 2 3 3 2 3 1 1 2 1 2 2
## [4645] 3 2 1 2 2 1 3 3 2 3 3 1 2 2 3 3 2 1 2 1 3 2 3 2 2 3 2 3 2 1 3 3 1 1 3 3
## [4681] 1 2 2 2 3 1 3 2 3 3 1 2 2 3 3 2 3 3 1 2 2 2 3 1 2 3 2 1 2 3 2 3 2 2 3 3
## [4717] 3 2 1 2 2 2 3 2 2 1 2 2 2 2 2 2 2 1 1 3 1 1 2 3 2 2 2 1 3 3 1 2 1 1 2 3
## [4753] 3 3 2 2 3 3 3 2 3 3 3 2 1 3 3 2 2 3 3 3 3 3 2 2 1 3 2 3 2 3 1 3 2 3 2 2
## [4789] 1 3 3 3 2 3 3 2 1 2 3 1 3 3 2 1 1 3 2 3 3 2 3 3 3 3 3 2 3 3 3 3 2 3 1 3
## [4825] 3 3 2 2 1 3 3 2 3 3 3 2 2 3 3 3 3 3 2 3 2 2 2 2 3 1 3 2 3 3 3 3 3 2 2 2
## [4861] 3 2 1 3 2 2 2 3 1 3 3 2 3 1 2 1 2 2 2 2 3 2 3 3 3 2 2 3 2 3 1 1 3 3 3 2
## [4897] 1 3 2 3 3 1 3 1 1 3 2 2 3 2 2 2 1 3 2 3 3 1 2 3 2 2 3 3 2 2 2 3 3 1 1 2
## [4933] 3 3 1 2 1 1 1 2 2 2 2 2 2 2 2 1 3 2 2 1 3 2 3 3 3 2 3 2 2 3 3 1 2 2 1 2
## [4969] 3 1 3 2 1 3 3 3 1 3 2 2 3 2 1 2 3 2 3 2 3 2 3 3 1 2 2 3 2 2 2 2 2 2 2 3
## [5005] 3 2 2 2 1 2 1 3 3 2 1 3 2 1 3 3 3 3 3 2 2 3 2 3 3 2 3 2 2 2 3 2 2 1 3 2
## [5041] 3 2 2 2 1 3 1 3 2 2 2 2 3 1 3 3 3 2 3 2 3 2 2 2 2 1 1 3 2 1 2 3 2 2 3 1
## [5077] 3 2 3 2 3 3 2 1 3 1 2 1 2 2 3 2 1 2 2 2 2 2 2 3 3 3 3 2 1 2 2 3 3 2 3 3
## [5113] 3 3 2 3 2 3 2 3 2 2 2 3 2 1 3 2 2 3 1 3 3 3 1 3 3 1 2 2 3 1 2 3 2 3 2 2
## [5149] 3 3 2 3 3 2 2 3 3 1 1 2 3 2 2 2 1 2 2 1 2 3 2 3 3 3 2 2 2 3 3 3 3 2 3 3
## [5185] 1 2 3 1 2 2 2 2 1 2 3 3 2 2 2 3 1 3 2 2 3 2 2 2 2 1 2 2 3 3 3 2 3 2 3 2
## [5221] 2 1 1 3 3 2 2 3 2 2 3 3 2 1 3 2 2 3 2 3 3 2 3 2 2 2 3 2 2 2 2 2 3 2 2 3
## [5257] 3 2 1 2 3 2 2 2 3 2 2 1 3 2 3 2 3 3 2 3 3 3 3 2 1 3 2 2 2 1 3 2 3 2 3 1
## [5293] 2 3 2 1 3 2 1 3 2 1 2 3 1 3 2 2 2 3 2 3 2 2 1 3 2 2 2 2 2 2 2 2 3 3 2 2
## [5329] 3 3 1 2 2 2 3 2 2 3 3 1 1 2 3 3 2 2 3 2 1 1 3 3 2 3 1 2 1 1 1 2 2 3 2 3
## [5365] 3 2 2 2 2 1 3 3 2 2 2 2 3 2 3 2 2 2 3 2 1 1 2 2 3 2 3 2 3 2 2 2 2 2 3 2
## [5401] 3 2 3 3 2 1 3 1 3 3 3 3 3 2 1 2 3 3 2 3 2 3 1 2 3 2 3 2 3 2 3 2 2 2 2 1
## [5437] 2 1 2 2 3 2 2 1 3 3 1 2 3 3 1 3 3 3 3 3 1 2 2 3 2 1 2 2 3 3 3 2 2 2 3 1
## [5473] 3 1 3 2 3 2 2 1 2 2 1 3 3 3 3 3 2 2 3 2 1 2 2 1 1 3 2 2 2 3 3 3 2 1 2 2
## [5509] 1 3 3 3 3 2 3 2 3 3 2 2 2 3 3 2 1 2 2 3 3 3 2 3 2 3 3 2 2 3 3 3 3 2 2 1
## [5545] 3 2 3 2 2 3 2 3 1 2 2 2 2 2 3 3 1 3 2 3 2 3 3 2 3 2 3 3 2 2 3 3 3 3 2 2
## [5581] 3 1 3 3 3 1 2 3 2 1 2 3 3 3 2 1 3 1 3 2 1 1 3 3 2 1 2 2 2 2 3 2 2 3 2 2
## [5617] 1 2 3 1 2 3 3 3 2 3 3 2 2 1 2 2 2 3 2 1 3 2 3 3 2 2 3 1 2 2 2 2 3 3 2 1
## [5653] 3 2 2 2 2 2 3 3 1 2 3 3 3 2 1 2 2 3 3 2 2 3 3 3 3 2 3 2 2 2 3 2 2 3 2 1
## [5689] 2 2 3 2 2 3 3 3 2 3 3 2 2 3 3 3 1 2 3 1 2 2 2 3 3 2 2 1 3 2 2 2 2 3 3 1
## [5725] 2 1 2 3 2 2 3 1 1 1 2 2 3 3 2 2 3 1 2 3 3 2 3 3 2 2 2 2 3 3 3 3 3 2 3 1
## [5761] 2 2 2 2 2 3 2 2 2 2 3 2 3 3 2 3 1 2 3 3 1 2 2 3 3 2 3 3 2 2 3 2 2 2 2 2
## [5797] 3 2 2 2 2 3 2 2 2 3 3 3 1 1 2 2 1 1 3 2 3 3 1 3 3 2 1 2 3 1 3 2 2 3 2 2
## [5833] 1 2 2 3 2 3 1 3 1 2 2 2 2 1 3 3 2 3 3 3 1 2 2 3 1 3 2 3 2 3 3 3 2 3 2 1
## [5869] 2 2 2 3 2 2 1 1 2 3 2 2 3 2 3 2 3 3 3 3 2 3 1 3 2 2 3 2 2 3 2 2 3 1 2 1
## [5905] 1 2 1 1 2 3 2 1 2 1 3 2 2 2 2 2 2 3 2 1 2 1 3 3 2 3 1 1 1 2 3 3 3 3 2 2
## [5941] 2 1 2 3 2 2 1 2 3 1 2 3 2 3 2 2 2 1 2 2 2 2 3 3 3 2 1 2 2 2 3 2 2 3 1 3
## [5977] 1 2 2 2 1 3 2 1 2 3 3 3 1 3 3 2 2 2 2 2 2 2 2 3 3 2 1 2 2 3 2 2 1 2 3 3
## [6013] 2 2 3 3 2 2 2 3 3 3 3 1 2 2 3 2 3 3 3 1 2 3 2 1 2 3 2 3 3 3 2 1 3 3 2 2
## [6049] 2 1 1 2 2 3 3 1 1 2 1 2 3 2 2 3 3 1 3 3 3 2 2 3 3 3 2 2 2 3 1 2 2 2 1 2
## [6085] 2 2 2 3 3 2 3 2 3 3 3 3 2 1 2 2 2 2 2 2 1 1 3 3 2 3 3 2 3 2 2 2 3 3 2 2
## [6121] 3 1 3 3 2 3 1 2 1 2 2 2 2 2 2 1 2 3 3 3 3 3 1 3 1 3 3 2 3 3 2 3 3 3 2 2
## [6157] 2 2 3 2 2 2 2 3 3 2 1 2 3 2 3 3 2 2 2 2 2 3 2 2 1 3 2 3 3 2 3 2 3 2 3 3
## [6193] 3 1 3 3 3 3 2 2 3 2 2 2 3 2 2 2 2 1 3 2 1 1 2 3 3 2 2 3 3 2 3 2 3 2 2 3
## [6229] 3 1 2 2 3 2 3 3 3 2 1 2 3 3 3 3 2 3 2 3 2 2 3 2 1 2 3 2 2 2 2 2 3 2 2 2
## [6265] 2 1 1 2 3 3 3 2 2 3 1 3 1 3 1 3 2 2 3 2 3 3 3 3 2 3 2 2 1 3 3 2 2 3 3 3
## [6301] 2 1 2 2 3 3 2 3 2 3 3 2 3 3 2 1 1 2 2 2 1 2 1 1 3 2 2 2 2 3 2 1 3 2 1 2
## [6337] 2 2 3 1 3 3 3 3 3 3 3 3 3 2 2 2 3 3 2 3 2 2 2 2 2 3 3 3 3 2 3 2 3 3 3 1
## [6373] 3 3 3 3 3 3 1 3 3 3 3 3 2 3 3 1 2 3 2 2 3 3 1 2 2 2 3 2 2 3 2 3 2 3 2 3
## [6409] 3 1 2 3 2 3 3 1 3 1 2 2 3 2 3 3 2 2 2 1 2 3 2 1 2 2 1 3 3 2 2 3 3 3 2 2
## [6445] 3 2 1 3 3 2 3 3 2 3 2 3 2 3 2 2 3 3 3 2 2 3 3 3 2 2 3 2 1 2 2 3 2 2 3 3
## [6481] 2 1 3 2 2 2 3 2 2 1 2 2 3 2 3 2 3 2 2 1 2 1 3 1 1 1 2 1 2 2 2 3 1 2 3 2
## [6517] 3 2 3 2 2 2 3 3 3 2 3 3 3 2 2 3 2 3 3 3 1 3 2 2 3 1 1 2 2 1 2 2 2 3 3 2
## [6553] 1 3 1 3 3 2 2 1 3 3 2 2 2 3 3 3 2 2 3 3 3 2 1 2 2 3 3 2 3 3 3 1 2 3 1 2
## [6589] 3 2 3 2 3 3 2 3 2 2 1 2 2 3 3 1 2 2 2 2 3 2 3 3 3 3 3 2 2 3 3 3 2 2 2 2
## [6625] 1 3 3 2 2 3 2 2 2 3 1 2 3 1 2 1 2 3 2 2 2 3 1 1 3 2 3 2 2 2 2 3 3 3 2 3
## [6661] 3 3 1 2 1 2 2 2 3 3 3 3 2 3 3 3 2 2 3 2 3 3 2 3 3 2 3 3 2 3 2 2 3 3 2 2
## [6697] 3 3 2 1 3 1 2 3 2 3 2 3 2 1 2 2 2 3 2 1 1 3 1 2 3 3 2 3 3 2 3 2 3 3 3 3
## [6733] 2 3 3 3 1 2 3 2 3 2 3 3 2 2 2 3 2 2 2 2 3 3 2 2 1 3 1 2 1 3 3 2 3 3 3 3
## [6769] 3 2 1 3 3 3 2 3 2 3 2 3 2 3 1 2 3 3 3 3 1 3 3 1 1 3 2 2 2 2 3 3 3 1 1 2
## [6805] 2 3 2 1 3 3 1 2 3 3 3 3 3 2 3 3 2 3 2 3 2 2 3 2 2 3 2 3 2 3 1 3 2 1 3 3
## [6841] 3 3 3 3 3 2 2 2 2 3 3 3 3 2 3 1 3 3 3 2 1 3 2 3 2 3 1 3 3 3 2 3 2 2 2 2
## [6877] 2 2 1 3 3 2 2 2 2 2 2 3 3 2 2 2 2 3 2 3 3 1 3 3 3 3 3 1 2 2 2 1 3 1 2 2
## [6913] 3 2 3 3 2 3 3 2 3 2 3 3 3 3 2 2 3 3 3 3 3 2 2 2 3 2 2 2 3 3 3 2 3 2 3 3
## [6949] 3 3 3 3 3 2 1 3 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 2 3 2 2 2 1 2 1 2 2 3 2 2
## [6985] 2 3 3 3 1 2 3 3 3 3 2 2 2 2 3 1 1 2 3 3 3 2 1 2 3 1 2 3 3 1 3 1 3 1 3 3
## [7021] 2 3 3 2 3 2 2 3 2 3 2 2 3 1 3 3 2 3 3 3 3 3 3 3 3 1 2 1 3 3 1 1 2 2 2 3
## [7057] 2 3 3 3 1 2 3 3 3 2 2 3 1 2 3 3 3 3 3 2 3 2 2 3 3 3 2 3 2 3 3 1 3 1 3 2
## [7093] 2 2 2 3 2 2 1 2 3 2 2 2 2 1 2 3 2 1 1 2 3 2 2 1 2 3 2 1 1 2 3 3 1 3 3 2
## [7129] 2 3 3 3 2 2 3 1 2 3 2 3 2 1 2 2 1 3 3 1 2 2 3 1 2 1 3 1 3 2 2 2 3 3 3 2
## [7165] 2 2 3 3 3 2 1 2 3 3 3 3 3 3 2 3 1 2 3 2 2 3 2 3 2 2 1 3 2 3 2 3 2 3 3 2
## [7201] 2 2 3 2 3 2 3 1 2 3 3 3 1 2 3 3 2 2 3 1 2 3 2 2 3 3 3 3 3 3 2 3 2 2 2 2
## [7237] 3 2 2 3 2 3 2 3 3 2 2 3 3 1 2 2 2 1 1 3 1 2 2 2 3 3 3 3 2 2 3 2 3 2 3 1
## [7273] 3 3 2 3 3 3 3 2 3 3 3 2 2 2 1 3 3 2 2 2 2 3 2 2 2 1 2 2 3 2 3 3 2 2 3 3
## [7309] 2 1 3 1 3 3 2 2 2 1 1 3 2 2 3 2 1 2 3 1 2 3 3 2 2 3 2 1 2 3 2 2 2 2 3 3
## [7345] 3 3 2 2 3 3 2 2 2 2 3 3 3 3 3 2 2 2 3 2 3 3 3 1 1 2 2 3 2 3 3 2 3 2 3 2
## [7381] 2 2 1 3 3 2 2 2 2 3 2 2 2 2 2 3 1 2 2 3 1 2 2 1 3 2 2 3 3 2 3 2 2 2 3 3
## [7417] 1 2 2 3 3 3 2 3 3 3 2 2 2 2 2 1 2 2 2 3 3 2 2 3 2 1 3 3 2 3 3 1 1 3 2 3
## [7453] 3 2 3 2 3 3 2 3 1 2 2 1 3 3 2 2 2 3 2 3 2 2 2 2 3 2 3 1 2 3 1 2 3 2 2 2
## [7489] 3 3 3 2 2 1 3 2 2 3 1 2 1 3 3 2 2 2 3 3 1 3 2 2 2 3 3 2 3 2 3 2 3 2 1 3
## [7525] 2 1 1 3 3 1 1 3 2 3 2 2 2 3 1 3 3 3 2 2 3 2 2 1 1 3 3 3 3 2 3 3 2 3 3 3
## [7561] 3 3 2 3 1 3 2 1 3 3 2 2 2 3 2 3 3 3 2 1 2 1 3 2 2 3 2 2 3 3 2 3 3 1 3 2
## [7597] 2 2 3 2 2 3 3 2 2 2 2 3 3 2 3 3 3 2 3 1 2 2 1 3 3 2 2 3 1 3 3 2 2 3 3 3
## [7633] 2 1 2 1 2 3 2 3 3 2 3 2 3 2 3 2 1 2 2 3 1 1 1 2 2 3 1 2 2 3 1 3 3 3 2 3
## [7669] 1 3 2 3 2 1 2 2 3 2 2 1 1 2 2 3 2 3 2 3 2 1 2 3 2 1 1 3 2 2 1 2 2 3 2 2
## [7705] 3 3 3 1 3 3 2 2 2 3 3 1 2 3 2 2 3 3 2 3 1 3 3 2 2 3 2 2 2 3 3 2 3 2 3 3
## [7741] 3 3 3 1 2 2 2 3 1 3 2 2 3 3 1 2 3 2 2 1 3 3 2 2 1 3 2 3 2 3 1 2 1 2 2 2
## [7777] 3 3 2 3 1 2 2 3 3 2 2 1 3 1 3 2 1 3 3 2 3 2 3 2 2 2 1 2 2 2 2 2 3 1 3 3
## [7813] 2 1 3 2 2 2 2 2 3 2 2 3 2 3 3 2 1 3 2 2 2 3 2 3 3 3 1 3 3 2 3 3 3 2 3 2
## [7849] 2 2 1 2 2 2 1 1 3 3 3 2 3 2 2 1 2 2 3 3 2 1 2 2 2 1 3 2 3 3 2 3 3 2 2 3
## [7885] 2 2 1 3 1 3 2 1 3 1 2 2 3 1 2 2 2 3 1 3 2 3 2 3 2 3 2 1 3 3 3 3 2 1 2 1
## [7921] 3 1 1 2 3 3 3 2 3 2 3 3 3 2 3 3 3 2 1 2 3 3 2 2 2 2 1 3 2 2 2 3 1 3 2 2
## [7957] 1 2 3 3 2 2 2 3 3 3 3 2 3 1 1 3 2 3 3 3 2 2 2 3 2 2 3 2 3 3 2 1 1 3 2 3
## [7993] 2 1 2 2 1 3 2 3 3 3 3 3 2 2 3 3 2 3 3 3 2 2 3 2 2 3 3 1 1 3 2 3 3 2 2 3
## [8029] 3 3 3 2 2 3 3 2 2 2 3 2 3 1 3 2 3 3 3 2 3 2 3 3 3 2 3 2 2 2 2 3 3 3 2 3
## [8065] 2 3 1 3 3 2 3 3 2 2 1 3 3 2 3 3 3 2 3 3 3 1 2 3 2 1 3 2 2 3 3 2 2 3 3 2
## [8101] 2 3 3 3 3 2 2 3 1 3 2 3 2 2 3 1 2 2 3 3 3 3 3 3 2 2 3 2 3 2 2 1 3 2 2 2
## [8137] 1 3 2 3 3 3 2 2 3 2 2 2 2 2 2 2 2 1 3 1 1 2 2 3 1 2 3 2 3 3 3 3 2 2 3 2
## [8173] 1 3 3 1 2 3 3 3 3 3 2 3 2 2 3 3 2 3 3 1 3 3 3 3 3 2 3 2 1 2 3 3 1 2 2 3
## [8209] 2 3 2 2 2 1 1 2 1 3 3 2 2 2 1 3 3 2 1 3 3 2 2 3 3 2 3 3 3 1 3 3 3 2 2 2
## [8245] 2 2 2 2 3 2 2 3 2 2 2 2 2 3 3 2 2 2 2 1 1 3 1 2 3 2 2 2 2 3 3 1 2 2 3 1
## [8281] 2 3 2 2 3 3 3 3 3 1 1 2 3 3 2 2 1 2 3 2 2 3 3 2 1 1 3 3 2 3 1 2 2 3 1 3
## [8317] 3 2 3 2 2 2 3 3 2 2 3 2 1 3 3 3 3 3 3 3 2 1 3 2 3 3 1 3 2 2 2 3 3 3 3 2
## [8353] 2 2 2 2 3 3 2 2 3 2 3 2 3 2 3 3 3 3 2 1 3 2 2 3 3 1 2 2 3 3 2 2 2 3 3 2
## [8389] 3 3 2 2 2 3 3 2 2 2 3 2 3 2 3 3 3 3 3 3 2 1 3 2 2 3 2 2 2 3 2 1 2 2 3 3
## [8425] 2 3 3 3 3 3 1 1 2 3 3 1 3 2 3 3 2 1 3 3 1 3 1 3 3 3 2 2 2 2 1 2 3 2 2 2
## [8461] 2 2 1 1 2 3 3 3 1 3 3 1 3 2 3 3 2 2 2 2 1 2 3 3 2 2 2 2 2 2 2 2 3 3 2 1
## [8497] 3 2 2 2 3 3 3 2 3 1 2 3 2 2 3 2 2 2 2 3 3 2 2 2 2 2 2 2 2 3 1 3 3 3 3 3
## [8533] 2 3 2 3 3 2 3 3 3 1 3 3 3 1 2 3 1 3 3 3 3 1 2 1 3 3 3 3 1 3 2 2 3 3 2 2
## [8569] 2 1 2 3 2 3 3 3 3 1 1 2 3 3 3 2 3 1 1 2 2 1 2 3 3 3 1 3 2 2 1 3 2 3 3 2
## [8605] 3 3 2 1 1 3 3 2 1 1 3 2 2 3 2 3 3 2 1 3 3 1 1 3 1 2 3 3 1 3 1 3 2 1 1 2
## [8641] 2 1 1 2 3 2 3 3 3 3 2 1 2 3 2 3 3 2 2 3 3 2 2 2 3 2 2 3 2 2 3 3 3 1 2 2
## [8677] 1 2 3 3 2 3 3 2 3 3 3 2 3 2 3 3 2 3 2 3 2 3 3 2 2 3 3 3 2 2 3 2 3 1 2 2
## [8713] 2 1 1 3 1 2 3 3 1 3 2 2 2 2 2 2 2 3 2 1 3 2 3 2 2 2 1 2 3 3 2 3 2 3 2 1
## [8749] 2 1 1 1 3 1 2 3 2 2 2 3 2 3 1 3 2 2 2 2 3 2 3 1 3 1 3 3 2 2 3 2 2 3 2 3
## [8785] 3 3 3 3 3 1 1 3 2 1 1 2 3 1 1 3 2 1 2 2 3 3 3 2 3 2 2 2 2 3 2 3 3 2 2 3
## [8821] 2 3 2 3 3 1 2 2 3 1 3 2 3 2 1 2 3 2 2 2 1 3 2 2 2 1 3 3 3 3 2 3 2 3 2 3
## [8857] 3 3 3 3 3 3 2 2 3 1 3 3 1 3 2 2 3 3 3 3 2 2 3 3 2 3 1 3 3 2 2 1 3 3 2 2
## [8893] 3 3 2 3 3 3 3 3 2 3 3 3 2 2 1 3 3 2 3 3 3 1 3 2 2 1 2 2 2 1 1 2 2 2 1 2
## [8929] 3 1 2 2 2 3 1 3 3 2 2 3 3 2 2 1 2 3 2 1 1 3 3 2 3 3 1 2 3 1 3 1 2 2 2 3
## [8965] 3 3 3 1 3 2 2 2 2 3 3 3 2 3 2 2 3 2 3 3 2 3 3 3 3 3 2 2 3 3 3 3 1 3 3 2
## [9001] 3 2 2 1 1 2 3 2 3 2 1 2 1 3 1 2 2 3 2 1 2 2 1 3 3 2 3 1 2 1 3 3 3 3 2 2
## [9037] 2 1 2 3 2 2 2 2 3 2 3 2 3 2 3 1 1 2 1 3 3 3 3 2 3 2 2 2 3 1 3 2 2 1 2 3
## [9073] 2 2 2 2 1 2 3 2 1 3 1 2 2 3 2 2 3 2 1 2 3 3 3 2 2 2 3 2 3 2 2 3 3 3 3 2
## [9109] 2 3 2 3 3 2 2 3 2 2 3 2 2 2 3 1 1 3 2 2 2 3 2 1 3 2 1 3 3 3 2 2 3 2 1 2
## [9145] 1 3 1 2 1 3 3 3 2 2 3 2 2 2 2 3 3 1 2 3 2 3 2 3 3 2 1 1 3 2 3 3 2 2 3 2
## [9181] 3 1 3 2 3 2 1 3 1 2 2 3 2 3 2 2 3 1 2 1 2 2 2 2 3 2 2 3 2 3 2 1 3 1 2 1
## [9217] 3 1 1 3 3 3 1 3 2 3 3 1 3 1 1 1 3 3 2 2 3 3 2 3 2 2 2 3 3 2 3 2 3 1 2 2
## [9253] 2 3 1 1 2 3 2 3 3 2 2 1 3 3 2 3 1 3 2 3 2 2 3 3 2 3 3 3 3 2 3 3 2 3 3 2
## [9289] 3 3 3 2 2 2 2 2 3 3 2 3 3 3 3 1 1 3 2 3 3 2 3 2 2 2 2 2 2 3 2 2 2 2 3 3
## [9325] 2 3 3 2 2 1 2 1 2 3 2 2 2 2 2 1 2 2 3 2 2 3 3 2 3 3 2 3 3 3 1 1 2 2 1 3
## [9361] 2 2 1 3 3 1 1 3 2 1 2 2 2 3 1 2 2 1 3 3 3 2 2 2 2 3 2 2 2 2 2 3 3 2 1 3
## [9397] 2 3 3 3 3 3 2 3 3 2 2 2 1 3 3 2 2 2 1 3 3 3 2 3 1 2 3 2 1 2 2 2 3 2 1 2
## [9433] 3 2 2 3 2 2 3 1 3 2 3 2 3 3 2 2 2 2 2 2 3 3 3 2 2 1 3 1 3 3 2 2 3 2 2 2
## [9469] 2 3 3 2 2 1 2 3 2 2 3 3 2 3 1 3 3 3 2 2 2 2 3 3 2 2 2 3 3 3 1 2 3 3 2 2
## [9505] 3 3 2 2 3 2 2 2 1 2 2 1 3 1 2 2 2 3 3 3 3 3 2 3 3 3 3 3 2 2 1 3 3 2 2 2
## [9541] 3 2 2 2 1 2 3 3 2 2 2 3 3 3 2 2 2 3 3 3 1 2 2 2 2 3 3 2 2 2 3 2 2 2 3 3
## [9577] 2 3 2 2 3 2 3 2 2 3 2 3 3 1 3 2 3 3 3 3 1 1 3 2 1 2 3 3 3 3 2 2 1 3 2 2
## [9613] 2 2 2 3 2 3 3 3 2 2 3 1 3 3 3 2 3 2 3 3 3 2 3 3 3 2 2 2 3 1 2 3 3 2 2 1
## [9649] 3 3 3 1 3 2 1 3 2 3 2 2 3 3 2 3 2 2 1 3 2 3 3 1 3 2 3 2 2 1 1 3 2 3 1 1
## [9685] 2 1 1 3 1 2 3 3 3 3 3 2 2 3 3 3 3 1 3 3 1 3 1 2 3 2 2 3 2 2 3 2 2 2 2 3
## [9721] 2 3 2 2 3 3 1 2 2 2 1 3 2 2 2 2 2 3 2 3 3 2 2 3 2 3 3 3 3 2 3 1 1 3 3 3
## [9757] 3 2 2 2 3 3 2 2 2 3 2 2 2 2 1 3 2 2 2 3 2 2 2 2 3 1 3 2 2 3 3 2 2 2 3 2
## [9793] 1 3 2 3 2 1 1 3 2 2 3 3 2 2 3 3 1 3 3 2 2 3 3 2 2 3 3 2 3 3 3 3 1 2 3 2
## [9829] 2 3 3 1 3 2 2 3 2 2 3 2 1 2 1 2 3 3 2 2 2 2 1 3 2 3 1 2 1 3 2 3 2 2 3 2
## [9865] 2 3 2 3 2 2 3 2 2 3 3 2 2 2 2 1 3 3 2 3 2 1 3 1 3 3 2 1 3 2 3 2 1 3 1 2
## [9901] 3 1 2 1 3 3 2 2 3 2 2 2 2 1 2 3 3 3 2 2 1 3 2 2 3 3 2 2 1 2 1 2 2 1 3 2
## [9937] 3 3 2 2 2 1 3 3 2 3 3 3 2 3 3 2 3 2 3 3 1 2 3 3 2 2 1 3 2 1 2 3 1 2 2 2
## [9973] 3 3 3 1 2 3 2 1 2 2 2 3 2 3 2 3 2 3 3 3 3 3 2 3 2 2 3 2 3 2 3 3 2 3 3 2
## [10009] 2 1 3 3 1 2 2 2 2 3 1 3 1 3 3 2 2 1 3 2 3 1 2 3 1 2 2 3 2 2 2 1 3 3 2 3
## [10045] 3 3 3 2 2 1 3 2 2 2 3 2 1 2 2 2 3 3 1 3 2 1 2 2 1 1 1 3 3 1 1 3 1 3 1 3
## [10081] 2 1 3 3 2 1 2 1 1 2 3 2 2 2 1 2 3 3 2 1 3 2 1 2 1 3 1 3 1 2 3 2 3 3 2 1
## [10117] 3 3 3 2 3 2 2 2 1 1 3 3 3 3 2 3 3 2 2 2 2 2 2 3 3 3 2 2 2 3 2 3 3 1 2 2
## [10153] 1 3 2 2 1 2 1 1 3 3 2 1 3 3 3 2 2 2 3 2 1 1 3 2 2 1 3 2 2 2 3 3 1 1 2 1
## [10189] 2 3 2 2 1 2 2 2 1 3 3 3 3 1 1 2 2 2 2 1 3 2 1 2 3 3 1 3 3 2 3 1 2 3 2 2
## [10225] 2 2 1 3 3 3 2 2 2 2 3 2 2 1 2 2 1 2 1 3 2 2 3 3 1 2 3 1 3 1 1 3 3 3 1 2
## [10261] 1 3 1 2 2 2 2 3 3 3 1 2 3 2 3 1 2 3 3 3 2 3 3 2 2 2 2 2 2 2 3 3 2 2 3 2
## [10297] 3 3 3 3 2 1 2 3 3 2 2 2 2 3 2 2 3 3 3 2 2 1 1 2 2 2 3 2 2 1 1 1 2 3 2 2
## [10333] 2 1 1 2 2 1 1 2 3 2 2 2 3 2 2 2 3 2 2 1 3 2 3 3 3 2 2 2 1 2 1 1 2 3 2 3
## [10369] 1 3 3 3 2 3 3 3 2 2 3 2 2 2 1 3 3 2 3 1 2 2 1 1 2 3 3 2 1 3 2 2 2 2 3 2
## [10405] 1 3 2 3 2 3 2 3 1 3 3 1 3 2 2 3 3 3 3 3 2 3 3 3 2 2 2 3 2 2 2 2 2 2 3 3
## [10441] 1 1 1 2 2 2 3 3 1 2 3 2 1 3 2 2 3 2 2 2 3 2 3 2 2 2 3 3 3 2 1 2 2 2 3 2
## [10477] 3 3 1 3 2 2 2 1 2 2 2 3 2 3 3 3 2 1 2 2 1 3 2 2 1 2 3 2 2 2 3 2 2 3 2 2
## [10513] 2 3 2 2 3 2 2 2 2 2 1 1 1 2 3 3 2 2 2 2 2 2 3 2 3 3 2 1 3 2 3 3 3 1 3 2
## [10549] 3 1 3 2 1 3 3 3 1 3 3 2 2 3 2 3 3 2 2 3 3 2 3 1 3 3 3 2 3 2 1 2 3 2 2 3
## [10585] 2 2 2 2 2 3 2 2 2 3 3 2 2 1 2 3 2 3 3 3 3 3 2 3 2 2 3 2 2 2 2 2 2 3 2 1
## [10621] 2 2 3 3 2 3 3 3 2 3 3 2 2 2 2 2 2 2 2 2 2 3 3 3 3 1 2 3 2 2 3 3 3 1 3 2
## [10657] 1 3 3 3 3 1 1 2 3 2 2 2 3 3 2 2 2 3 2 3 2 1 3 2 3 1 2 2 3 3 2 2 3 2 3 2
## [10693] 2 2 3 2 2 3 3 1 2 3 3 3 3 3 1 2 1 3 3 3 3 2 2 3 3 2 3 2 2 2 3 3 3 3 3 2
## [10729] 3 2 2 3 3 2 3 3 3 1 3 2 3 2 2 2 3 1 3 3 2 1 2 2 3 2 3 2 2 3 2 1 2 2 2 2
## [10765] 2 2 1 1 3 2 1 3 2 3 2 1 2 2 3 3 3 1 2 2 2 2 3 3 2 2 3 3 2 3 3 2 3 3 2 2
## [10801] 2 3 2 1 2 2 3 2 2 1 3 2 3 2 2 2 3 2 2 3 3 3 3 3 2 2 1 1 1 1 2 2 2 2 3 3
## [10837] 1 2 2 3 3 3 2 2 2 2 2 3 3 2 2 3 3 2 2 3 3 3 3 2 3 3 1 1 3 3 2 2 1 3 2 2
## [10873] 2 3 2 2 3 3 2 2 3 3 3 3 2 3 3 2 2 3 3 1 2 1 3 2 2 3 2 3 2 1 2 2 3 3 3 3
## [10909] 2 3 3 1 3 2 2 3 3 2 3 2 2 3 3 2 3 3 1 3 2 2 2 2 3 3 3 2 3 3 2 3 1 3 3 1
## [10945] 1 3 3 3 3 1 2 2 3 3 2 2 2 3 3 2 1 3 3 2 3 3 2 2 3 2 3 3 3 3 1 1 2 2 2 1
## [10981] 2 2 2 1 2 2 3 3 2 3 3 3 2 3 2 3 3 3 1 3 3 2 3 2 2 2 2 1 3 2 3 3 2 3 2 1
## [11017] 2 3 2 2 1 2 3 2 1 3 1 3 3 2 3 2 3 2 2 2 3 3 2 2 3 2 2 3 2 3 2 3 3 3 3 1
## [11053] 1 3 3 1 2 2 2 2 2 3 3 2 1 1 2 2 2 2 3 3 2 3 1 2 2 3 2 2 2 3 2 2 3 3 3 2
## [11089] 3 3 2 1 3 3 1 2 1 2 2 1 2 2 3 3 3 3 3 2 3 2 1 3 3 2 1 1 2 3 2 3 3 1 3 3
## [11125] 3 1 1 1 2 2 3 1 2 2 3 3 3 3 3 2 3 2 3 2 2 3 3 2 3 2 3 3 1 1 1 2 2 3 2 3
## [11161] 2 3 3 2 2 3 2 3 2 3 1 2 2 2 2 2 2 3 2 3 1 2 3 3 2 3 2 3 3 1 3 2 3 3 2 3
## [11197] 3 3 3 1 2 1 2 3 3 3 3 3 1 3 2 2 1 2 3 1 2 1 3 2 2 2 2 2 1 1 1 2 2 3 2 3
## [11233] 3 3 3 2 1 3 3 3 2 1 3 3 2 3 3 2 2 2 2 2 2 2 3 2 2 3 2 3 2 3 3 1 3 3 1 3
## [11269] 1 2 2 1 3 3 3 1 2 3 3 2 3 2 1 3 2 3 3 3 1 3 3 3 3 1 2 2 3 2 1 1 2 2 2 3
## [11305] 1 3 3 3 3 2 3 1 1 1 3 3 2 1 1 3 3 3 2 3 1 3 2 2 2 1 3 2 3 1 2 2 2 3 1 1
## [11341] 1 2 1 3 3 2 3 2 3 2 2 3 3 2 3 2 3 1 3 3 3 3 2 2 3 3 2 3 3 3 2 2 2 3 2 2
## [11377] 2 1 2 1 3 3 2 1 2 3 1 2 1 2 2 2 2 3 1 3 2 3 2 2 3 2 2 3 2 3 1 2 2 3 2 2
## [11413] 2 3 2 2 3 3 1 2 2 3 3 2 3 3 3 3 3 3 3 3 2 2 2 2 1 3 1 2 2 3 3 2 2 2 3 2
## [11449] 3 2 3 1 2 2 2 3 1 1 2 2 2 3 2 3 3 2 2 3 3 3 2 3 3 3 2 3 3 3 3 2 3 1 2 3
## [11485] 2 3 3 3 1 3 2 1 2 2 1 3 2 2 2 2 2 3 2 2 3 3 3 2 2 2 2 3 2 3 3 2 2 3 2 2
## [11521] 1 1 2 2 1 2 2 3 2 3 2 1 3 3 1 3 3 1 2 2 3 2 2 2 3 1 2 2 2 3 3 2 1 2 3 3
## [11557] 1 3 2 3 1 3 2 3 3 2 1 2 2 2 2 2 3 3 3 3 3 3 3 3 3 2 1 2 2 3 1 2 2 2 1 3
## [11593] 2 1 2 3 3 3 3 3 1 2 2 1 3 2 3 3 2 2 2 2 3 2 2 2 3 3 2 3 2 3 2 3 3 3 3 3
## [11629] 3 2 3 2 2 2 2 1 2 1 3 1 2 3 2 2 2 3 3 3 3 2 3 3 2 3 3 2 3 3 3 3 3 2 2 3
## [11665] 2 1 3 1 2 2 3 2 1 2 3 3 2 3 1 2 2 3 2 2 3 2 2 1 3 2 2 3 2 2 3 3 2 2 2 1
## [11701] 2 2 1 3 2 2 3 3 2 3 3 3 3 3 2 3 2 3 3 2 3 2 3 2 2 3 3 3 2 2 1 3 3 1 3 3
## [11737] 3 2 3 3 2 2 3 2 3 3 3 1 3 1 3 3 3 2 3 3 3 3 2 2 3 3 3 3 2 2 2 2 2 2 2 1
## [11773] 2 3 3 1 2 2 2 2 2 2 2 3 2 2 2 3 2 2 3 3 3 2 2 3 1 1 3 2 3 3 2 3 2 3 3 2
## [11809] 2 1 2 2 1 2 3 3 2 2 2 3 3 2 3 2 1 1 2 2 2 1 2 3 3 3 3 1 2 3 3 1 3 1 1 2
## [11845] 3 2 2 2 1 1 2 2 3 1 1 3 2 2 2 3 3 2 3 2 2 3 2 2 3 2 3 3 2 3 2 2 3 2 2 3
## [11881] 2 2 3 1 2 1 2 3 1 3 2 3 2 2 3 2 3 3 2 2 3 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3
## [11917] 2 2 3 2 1 1 3 3 3 1 2 3 1 2 3 2 3 3 1 3 3 2 2 2 3 1 2 2 2 1 2 2 1 3 1 2
## [11953] 2 2 2 2 3 3 2 2 3 3 2 2 3 1 1 2 1 3 2 3 2 3 2 3 3 2 2 1 3 3 1 3 1 1 3 2
## [11989] 1 3 3 3 3 2 2 3 2 2 2 1 3 3 3 1 3 2 3 3 2 2 2 3 2 2 3 2 3 3 1 3 1 3 3 3
## [12025] 3 3 3 2 1 1 3 3 3 2 3 3 3 2 2 3 3 1 3 1 3 2 3 1 2 2 3 3 3 3 2 2 2 3 3 3
## [12061] 2 2 3 3 2 3 2 3 3 2 1 2 3 3 2 2 2 3 1 3 1 3 1 3 2 3 2 2 3 2 3 2 2 3 2 3
## [12097] 3 2 3 2 3 3 3 2 3 2 3 2 3 2 2 3 3 3 2 2 2 3 3 2 2 2 3 2 3 2 2 1 3 3 1 3
## [12133] 3 1 2 2 2 2 3 2 2 3 3 2 3 2 2 2 2 3 3 3 2 3 1 2 2 3 3 2 3 2 3 3 3 1 3 2
## [12169] 3 2 2 3 2 3 3 3 2 2 1 2 2 3 2 2 3 3 3 2 2 2 3 3 2 3 2 1 2 2 2 2 2 2 3 3
## [12205] 3 2 3 3 2 3 2 2 2 1 2 1 3 3 2 1 1 2 2 3 2 2 2 3 1 2 2 1 3 3 1 1 1 3 1 3
## [12241] 2 2 2 3 2 3 3 2 3 2 2 3 1 3 3 2 1 2 2 3 2 3 2 3 3 2 3 3 1 2 3 3 2 1 3 2
## [12277] 2 3 3 2 3 3 3 2 3 2 2 3 3 3 2 3 1 3 2 2 3 2 3 2 3 2 2 3 2 3 3 2 3 2 2 2
## [12313] 2 2 2 3 2 2 1 3 2 3 2 3 2 3 2 3 3 3 1 2 3 3 3 3 2 3 2 2 2 3 3 2 2 2 3 3
## [12349] 3 2 3 2 3 3 2 2 2 3 2 3 2 3 2 2 1 2 3 3 3 2 2 3 2 2 2 2 3 3 2 1 3 3 2 2
## [12385] 3 2 2 1 2 2 3 3 2 1 2 3 2 2 1 3 3 1 1 2 3 3 2 1 3 1 3 1 3 2 2 2 2 3 2 2
## [12421] 2 2 2 3 2 3 3 3 3 3 2 3 3 3 2 2 3 2 2 2 3 2 3 2 1 2 3 1 3 2 3 3 2 3 3 1
## [12457] 3 3 2 1 3 2 3 3 3 3 3 2 2 3 2 3 2 3 2 3 2 1 2 3 3 2 2 3 3 3 3 3 1 2 2 2
## [12493] 3 3 3 2 1 2 2 2 3 3 3 3 2 1 3 2 2 2 2 2 2 1 2 2 3 3 2 3 3 1 2 3 1 2 3 2
## [12529] 3 3 2 2 2 2 1 3 3 3 1 3 2 3 3 1 2 1 2 1 2 1 3 2 2 3 2 3 3 3 1 2 3 3 3 1
## [12565] 3 1 2 2 2 3 2 2 3 2 1 3 1 3 3 1 1 3 2 2 3 3 2 3 3 2 2 3 3 2 3 2 2 2 3 3
## [12601] 3 2 2 3 1 1 3 2 2 3 2 1 2 3 3 2 2 3 3 1 3 3 3 2 2 2 2 3 2 1 2 3 3 3 2 3
## [12637] 2 3 3 3 2 3 1 2 2 2 3 2 3 2 3 1 3 2 2 3 2 3 1 3 3 1 1 1 3 3 2 1 2 3 3 3
## [12673] 1 3 3 2 2 2 3 3 3 3 2 3 3 2 3 1 3 3 1 3 3 2 2 3 2 2 1 2 3 2 2 3 2 2 2 3
## [12709] 3 3 2 3 1 3 3 1 2 3 3 3 2 3 3 2 3 2 3 2 2 3 3 3 3 3 3 2 3 3 2 2 2 2 2 2
## [12745] 3 3 2 1 3 1 2 1 3 3 3 2 3 2 3 2 2 1 2 3 2 2 1 3 3 3 3 2 3 1 2 3 2 3 3 2
## [12781] 2 3 2 1 3 3 3 3 2 3 2 1 3 3 2 2 2 3 1 2 3 3 3 2 2 1 3 2 3 3 3 3 2 3 2 1
## [12817] 2 2 3 3 3 3 1 2 1 2 2 2 3 3 2 2 3 2 2 2 3 3 2 2 3 2 3 1 3 2 3 1 3 2 3 3
## [12853] 2 3 2 1 2 3 3 2 2 3 2 3 3 3 3 2 2 2 3 2 2 2 2 1 2 2 3 3 2 2 3 2 2 3 2 2
## [12889] 2 1 1 2 3 1 2 3 2 2 3 3 3 3 2 2 3 2 1 3 1 3 3 3 3 3 2 2 3 3 2 2 2 2 1 2
## [12925] 3 3 3 3 2 1 2 1 1 3 2 2 2 3 2 3 2 2 2 1 2 3 3 3 3 2 2 3 2 3 3 1 3 3 1 2
## [12961] 3 2 1 2 3 2 2 2 3 2 2 2 2 1 2 2 2 2 2 1 2 1 1 2 1 2 3 2 3 2 3 3 2 3 3 2
## [12997] 2 2 3 2 3 2 1 3 2 1 3 2 2 2 2 3 1 2 3 2 3 3 2 3 2 2 3 1 3 1 2 1 2 2 3 2
## [13033] 2 1 3 2 3 2 3 2 2 2 3 3 1 3 2 3 1 1 2 3 2 3 3 1 3 3 2 2 3 3 1 2 3 2 2 2
## [13069] 2 2 1 3 2 3 3 3 3 3 3 2 3 3 3 1 2 3 2 3 3 3 3 2 2 1 3 3 2 3 2 2 1 2 3 2
## [13105] 3 3 1 3 2 2 2 2 2 2 3 3 2 2 2 2 3 2 2 3 3 2 2 3 3 3 2 3 3 2 2 3 2 3 2 3
## [13141] 3 2 1 3 1 2 2 2 3 2 3 2 3 3 3 2 2 3 2 3 2 1 3 2 2 3 3 1 3 1 2 3 2 2 3 2
## [13177] 2 1 3 2 3 3 2 2 2 2 3 3 2 3 3 2 2 1 1 3 3 2 3 2 2 3 1 3 2 2 2 3 2 1 3 3
## [13213] 3 2 3 2 3 2 1 3 3 3 2 3 2 2 2 3 1 3 1 3 3 1 2 2 2 2 3 3 3 2 3 2 2 2 2 3
## [13249] 2 2 3 3 3 3 2 2 3 2 3 2 3 3 1 2 3 3 3 2 2 1 2 1 3 3 3 3 3 1 3 2 2 3 1 2
## [13285] 2 3 2 3 1 3 2 2 2 3 1 2 3 1 2 2 3 3 1 2 3 2 2 2 1 2 2 3 3 3 3 3 2 2 1 1
## [13321] 2 3 3 2 1 2 2 3 3 2 2 3 1 2 1 3 3 3 2 1 3 2 2 3 2 3 1 1 2 3 3 2 2 3 3 3
## [13357] 1 1 3 3 3 3 2 3 3 2 3 3 2 2 3 1 2 2 2 3 3 2 1 3 2 3 2 3 3 3 1 2 3 3 3 2
## [13393] 3 1 2 2 3 2 3 1 2 3 3 3 2 3 1 2 2 3 3 3 3 3 1 1 3 3 2 2 2 3 2 3 2 3 3 3
## [13429] 2 3 3 2 2 2 1 3 2 3 2 3 2 2 2 3 3 2 2 2 2 1 3 3 3 3 3 3 2 2 3 2 3 2 2 2
## [13465] 1 2 2 3 2 3 2 2 3 2 3 2 1 3 2 1 2 1 2 3 2 3 2 2 1 2 3 2 3 2 2 2 1 3 3 2
## [13501] 3 3 2 3 2 3 3 3 2 3 3 2 2 2 2 3 3 3 2 3 3 3 3 3 3 2 2 3 3 3 3 2 3 2 3 3
## [13537] 3 1 3 3 3 3 2 3 3 2 3 3 1 2 2 2 3 2 2 3 3 1 2 1 2 3 2 3 2 3 2 1 2 2 3 2
## [13573] 3 3 3 2 3 3 2 2 2 2 2 2 2 2 2 3 2 3 3 2 3 1 2 3 1 2 3 2 3 2 2 3 3 2 3 3
## [13609] 2 1 2 3 2 2 2 2 3 2 2 1 3 3 2 3 3 2 2 3 3 2 3 3 2 2 2 2 2 3 3 2 2 1 3 2
## [13645] 3 1 3 3 3 1 3 1 2 2 2 2 2 2 1 2 2 3 2 3 2 2 1 3 1 1 3 2 1 2 2 1 2 2 3 3
## [13681] 3 1 3 3 2 3 2 1 3 2 1 2 2 3 2 1 3 2 3 3 3 3 2 3 2 2 3 2 2 1 3 2 3 3 2 2
## [13717] 1 2 2 3 3 1 1 3 3 3 3 2 3 2 2 3 3 1 2 2 2 2 3 2 2 2 2 1 2 2 2 2 3 2 2 3
## [13753] 1 2 1 3 3 2 2 3 2 3 2 3 2 3 2 3 2 3 3 3 2 3 2 2 3 2 1 3 3 2 2 2 2 2 2 3
## [13789] 2 1 3 1 1 1 3 2 2 3 3 3 1 2 1 2 1 1 2 1 2 2 3 3 2 2 1 2 2 2 2 2 3 2 3 2
## [13825] 3 3 3 3 3 3 1 3 3 2 2 3 3 2 2 3 2 2 3 3 2 3 2 3 2 3 2 3 2 2 2 2 3 2 3 2
## [13861] 1 2 2 2 3 2 3 2 3 3 3 3 2 2 1 3 3 3 3 2 3 2 3 3 3 3 2 1 1 3 3 2 3 1 3 3
## [13897] 3 2 1 2 2 2 3 3 3 2 3 2 2 3 2 2 3 2 2 3 2 3 1 3 3 3 1 2 3 2 3 2 2 3 3 3
## [13933] 2 3 1 2 2 3 3 3 2 3 3 3 2 2 2 3 3 1 2 2 3 3 2 1 2 3 3 3 2 1 3 3 2 2 2 3
## [13969] 3 1 2 1 2 3 3 1 2 3 2 2 3 3 2 2 3 3 2 2 2 2 2 3 2 2 3 3 3 2 2 3 3 2 3 2
## [14005] 3 3 2 3 3 1 1 2 2 1 2 2 3 3 2 3 2 3 3 3 3 3 2 1 2 2 3 1 2 2 3 2 2 1 3 1
## [14041] 1 2 2 2 2 3 2 2 2 3 3 3 1 3 3 2 2 2 2 2 2 3 2 3 2 2 3 2 3 1 3 3 3 2 3 2
## [14077] 1 3 2 3 2 1 2 1 1 1 2 3 3 2 3 3 2 3 3 2 2 2 2 2 1 2 3 3 1 3 2 2 2 3 3 3
## [14113] 2 2 2 3 1 3 1 2 2 2 3 2 2 2 3 3 2 2 3 1 2 3 3 2 3 3 2 3 2 2 1 2 3 1 3 3
## [14149] 2 1 2 1 3 1 1 2 3 3 2 2 3 2 2 3 1 2 3 1 3 1 3 1 1 1 1 2 3 2 2 2 2 3 2 3
## [14185] 3 2 2 1 2 2 2 3 3 2 2 2 2 2 1 2 3 3 3 3 2 2 3 3 2 2 1 1 1 2 2 2 3 3 2 2
## [14221] 2 2 2 3 1 3 2 2 2 2 3 2 3 2 2 1 2 2 3 1 3 2 2 2 1 2 1 2 3 2 3 2 2 3 1 3
## [14257] 1 2 3 2 1 2 2 2 3 1 2 3 3 3 3 2 1 3 3 2 2 2 3 2 3 3 2 2 2 2 3 2 3 2 3 3
## [14293] 3 3 3 2 3 2 2 3 2 1 1 3 2 3 2 1 3 3 3 3 3 3 2 3 2 2 2 3 3 2 2 2 3 2 2 2
## [14329] 2 3 2 2 2 3 2 2 2 3 3 2 2 1 1 2 2 3 1 1 1 3 3 3 2 3 2 2 3 1 3 1 2 3 1 2
## [14365] 3 3 2 2 3 2 3 1 3 3 3 3 2 1 3 2 2 2 2 2 2 3 1 3 2 3 3 2 2 2 2 3 1 3 2 3
## [14401] 2 3 2 3 2 1 3 1 3 2 3 2 3 3 1 3 3 1 3 1 3 2 3 2 2 1 2 3 2 2 3 3 3 3 3 2
## [14437] 3 2 2 3 3 3 3 2 2 3 3 3 1 2 3 3 2 2 3 2 2 1 1 3 2 3 2 3 2 1 3 3 1 2 2 2
## [14473] 1 2 3 1 3 2 3 2 3 3 2 3 2 1 2 3 3 2 3 2 3 1 3 2 3 2 2 3 3 2 2 3 2 3 3 3
## [14509] 3 2 2 2 3 1 2 3 2 3 3 3 3 3 2 3 3 1 2 2 1 2 1 2 3 3 2 1 3 3 2 3 2 3 2 1
## [14545] 3 3 2 2 3 1 3 2 3 2 2 3 3 3 1 3 3 3 3 2 3 3 3 3 1 2 2 3 2 3 2 2 1 3 3 3
## [14581] 1 2 3 3 1 3 2 2 1 2 3 2 1 3 1 3 2 1 2 2 2 3 3 1 3 2 3 2 2 3 3 2 3 3 1 2
## [14617] 2 2 1 3 2 3 2 1 2 2 1 2 1 1 2 2 1 1 2 3 1 2 3 3 2 3 2 1 1 3 3 3 3 3 3 2
## [14653] 3 3 2 3 3 2 2 3 2 3 2 2 2 2 3 2 2 1 3 1 2 2 3 3 2 3 1 3 2 3 2 3 3 2 2 1
## [14689] 3 2 3 2 3 1 1 2 2 3 2 3 2 2 1 3 3 1 3 2 2 3 3 3 2 2 2 3 3 3 3 3 2 2 2 2
## [14725] 2 3 1 2 3 2 1 3 3 2 3 1 3 3 3 2 2 2 3 3 3 2 2 3 3 1 3 1 3 1 3 3 3 2 2 1
## [14761] 3 2 3 2 3 1 2 1 1 1 2 2 2 3 2 3 1 2 3 2 2 2 1 2 2 1 3 3 2 2 2 1 2 3 2 3
## [14797] 2 3 2 2 3 2 2 2 2 3 3 3 1 3 1 3 3 2 2 2 2 2 1 3 2 2 2 2 3 2 1 2 3 2 2 3
## [14833] 3 2 3 2 2 3 2 3 2 1 3 2 1 3 2 2 3 2 3 1 2 2 2 2 3 2 2 3 2 1 1 3 3 3 3 3
## [14869] 1 2 3 1 3 3 3 1 1 2 3 3 2 3 3 3 2 3 2 1 3 2 3 2 1 2 2 2 2 2 2 3 3 1 2 3
## [14905] 3 2 2 1 3 2 3 2 3 3 3 3 3 2 2 2 3 3 2 3 2 2 3 1 3 2 3 2 3 3 2 3 2 1 2 2
## [14941] 2 2 3 3 2 3 3 2 1 2 3 2 2 2 2 3 1 2 2 2 3 3 3 3 2 2 2 2 1 2 2 3 3 2 3 2
## [14977] 3 1 2 3 3 2 3 3 1 3 1 2 1 2 1 2 2 3 3 3 3 2 3 2 3 2 2 3 2 2 1 3 3 1 2 3
## [15013] 2 2 3 1 3 3 3 2 3 1 3 3 3 3 2 2 1 3 3 2 3 1 3 3 2 1 2 2 3 2 2 1 1 3 3 2
## [15049] 3 3 3 3 1 3 1 2 2 3 3 1 3 3 3 2 1 1 3 2 1 3 3 3 1 3 3 3 3 1 3 1 2 3 2 3
## [15085] 3 3 3 3 3 2 3 3 1 3 1 2 3 2 3 1 2 2 2 2 2 3 3 2 2 3 2 3 2 3 3 1 3 2 2 1
## [15121] 1 2 2 2 2 3 3 2 3 2 3 1 3 2 3 3 3 3 3 3 3 2 3 3 3 1 2 3 2 2 3 2 2 1 2 2
## [15157] 1 3 2 3 3 3 1 3 3 3 3 3 2 2 1 3 3 2 2 3 2 1 2 2 2 1 2 3 2 3 3 2 3 3 3 3
## [15193] 3 3 1 3 3 3 3 3 3 3 3 3 2 3 1 2 2 3 1 2 3 3 2 3 3 2 3 2 1 3 2 2 2 2 3 2
## [15229] 2 3 2 2 3 2 2 2 2 2 3 3 2 3 3 2 3 3 2 3 1 2 3 1 1 1 3 2 3 3 2 2 3 2 3 3
## [15265] 3 2 1 3 3 3 2 3 2 1 2 1 2 3 2 2 1 1 2 2 3 2 2 3 3 2 2 1 3 3 3 3 2 3 2 2
## [15301] 2 3 1 2 1 3 1 3 2 3 2 1 2 3 3 3 3 3 2 3 3 3 2 3 3 2 1 3 3 2 2 2 2 3 3 2
## [15337] 3 2 3 2 2 2 2 2 2 2 1 2 3 1 3 3 3 3 3 2 3 3 2 2 3 2 3 3 2 2 3 2 2 2 2 3
## [15373] 1 2 3 2 1 3 2 3 2 3 3 3 3 2 2 3 3 3 3 3 2 3 1 3 2 2 1 3 3 3 2 2 3 3 2 2
## [15409] 3 3 1 3 2 2 2 3 3 1 2 3 2 2 3 1 2 3 3 2 2 3 2 2 2 2 2 3 2 2 3 3 1 3 2 1
## [15445] 3 2 3 3 3 2 3 3 3 3 3 3 2 2 3 1 2 2 2 3 2 3 3 3 2 2 3 3 2 3 1 3 3 2 3 3
## [15481] 3 3 2 3 2 2 3 3 2 2 2 2 2 3 3 3 3 3 2 2 2 2 1 3 1 2 2 2 2 2 3 2 2 3 3 3
## [15517] 2 3 1 2 2 3 3 2 3 3 2 3 3 2 2 2 1 2 3 1 1 2 3 1 2 2 2 1 2 2 2 1 3 3 2 3
## [15553] 3 1 3 2 3 3 3 2 3 2 3 2 2 1 1 3 1 3 1 3 2 3 1 2 2 2 2 2 2 2 2 2 3 3 1 2
## [15589] 1 3 2 3 1 3 2 3 3 3 3 3 2 3 1 2 1 1 3 3 3 2 1 2 1 1 2 3 1 2 2 3 3 3 2 3
## [15625] 3 3 3 1 2 3 2 2 2 3 3 2 3 3 2 2 3 1 1 2 3 3 3 1 3 2 2 1 3 3 3 2 2 2 1 1
## [15661] 2 2 2 3 3 3 2 2 1 3 3 2 1 3 3 2 2 1 2 3 2 3 2 2 2 3 3 1 3 3 2 3 2 2 3 2
## [15697] 3 3 3 3 2 1 1 3 2 2 3 2 3 1 2 3 2 2 2 3 2 2 1 3 3 3 2 3 1 2 2 1 3 1 1 2
## [15733] 2 2 2 3 3 3 3 2 2 3 3 3 3 3 2 3 1 1 2 3 3 2 3 2 3 3 3 2 2 3 2 2 1 3 3 1
## [15769] 3 1 3 2 1 3 2 2 2 1 3 2 2 3 2 2 3 3 3 2 2 2 2 2 3 1 2 2 3 3 2 1 3 3 3 3
## [15805] 2 3 3 2 3 2 3 3 2 2 2 2 2 3 3 3 2 3 3 3 1 3 2 2 3 3 3 3 3 2 3 3 2 2 3 2
## [15841] 1 2 3 3 2 2 3 3 1 3 1 2 1 2 3 3 2 2 3 3 2 3 3 1 2 2 2 2 3 2 3 1 1 3 2 3
## [15877] 2 3 3 2 3 2 2 1 2 2 3 2 2 2 2 3 1 2 3 3 3 2 2 3 3 3 3 2 3 3 3 2 3 1 2 2
## [15913] 1 3 1 3 3 2 1 1 3 2 2 2 2 3 2 3 3 2 1 1 3 3 3 2 2 2 2 2 1 1 3 1 2 2 3 3
## [15949] 2 2 2 2 2 3 3 2 2 2 2 3 2 3 2 2 1 2 1 3 1 2 1 2 3 2 2 2 2 2 2 2 3 3 3 1
## [15985] 3 3 1 1 3 2 3 3 2 1 2 3 2 2 2 2 1 3 3 2 3 2 3 3 3 2 2 2 3 1 2 3 3 3 2 1
## [16021] 3 1 1 2 1 2 3 2 2 2 3 3 3 3 2 2 2 3 2 2 2 2 3 3 2 3 3 2 2 3 3 1 2 3 2 2
## [16057] 2 3 2 3 3 3 2 3 2 2 2 3 1 3 2 2 2 1 3 2 2 3 2 3 2 3 3 3 1 2 3 1 2 3 2 2
## [16093] 2 2 3 3 2 1 2 2 2 3 2 1 3 2 2 1 3 2 2 1 3 3 2 2 3 1 3 3 3 2 1 1 3 3 3 3
## [16129] 3 3 2 1 1 2 3 3 1 1 2 2 2 1 3 3 2 3 3 3 3 1 3 2 2 3 2 3 3 3 3 2 3 1 2 2
## [16165] 2 2 3 2 1 2 2 2 2 3 2 2 2 1 3 2 2 3 3 2 2 2 1 2 2 3 1 3 2 3 3 2 3 2 2 2
## [16201] 3 2 1 2 3 2 2 3 1 1 3 3 3 3 2 2 3 2 3 3 2 3 2 2 3 2 3 3 1 2 2 3 3 2 1 1
## [16237] 3 1 2 3 3 2 3 2 3 3 2 3 3 3 3 2 3 3 3 1 1 2 1 3 2 3 2 3 2 3 3 2 3 2 2 2
## [16273] 3 3 3 2 1 3 1 3 2 2 2 3 3 2 1 1 3 2 2 2 3 3 3 2 3 2 2 2 2 3 3 2 2 2 3 2
## [16309] 2 2 1 2 2 3 1 1 3 1 3 2 3 3 2 3 2 2 3 2 3 2 3 1 3 3 3 3 2 3 3 2 3 3 2 1
## [16345] 3 2 1 2 2 2 3 2 3 1 2 3 2 3 2 3 2 3 2 1 1 3 3 2 3 2 3 2 1 3 3 2 3 1 2 2
## [16381] 1 2 2 3 3 3 3 3 1 2 2 3 2 3 3 3 1 3 2 3 2 2 3 2 2 1 1 1 3 2 2 3 2 2 3 3
## [16417] 3 3 1 2 2 3 3 3 1 2 3 1 2 2 2 3 3 1 1 2 2 2 2 3 3 3 2 3 3 2 1 2 2 1 3 1
## [16453] 3 2 2 3 2 2 2 3 3 3 2 2 3 2 1 2 2 2 2 3 3 1 2 1 2 2 3 3 2 2 3 3 2 3 3 3
## [16489] 3 1 3 2 2 2 2 3 3 3 1 2 1 3 1 2 3 2 2 2 1 1 3 3 3 1 2 3 2 2 3 2 3 3 3 3
## [16525] 2 2 2 2 2 3 2 2 3 3 3 3 1 3 3 2 1 3 3 2 1 2 2 3 3 3 2 1 3 3 2 3 3 3 3 2
## [16561] 2 3 3 3 2 2 3 2 3 1 1 3 3 2 2 2 2 3 2 3 3 1 2 2 2 1 1 2 2 2 2 2 2 3 3 2
## [16597] 2 3 2 1 2 3 3 2 2 3 2 3 2 3 2 2 3 1 3 3 3 3 3 3 1 2 1 3 2 1 2 2 1 3 2 1
## [16633] 1 3 2 2 3 2 3 2 3 3 3 3 3 2 2 2 3 2 3 2 3 2 2 2 3 3 2 2 3 2 2 2 2 3 3 1
## [16669] 1 1 3 2 3 2 3 2 2 2 1 1 2 2 2 3 2 2 3 1 2 3 2 3 2 2 3 2 2 2 3 2 3 3 1 3
## [16705] 2 2 2 2 3 2 3 2 1 2 3 1 2 2 2 3 2 3 2 3 2 2 1 1 1 2 3 2 3 3 2 2 2 3 1 2
## [16741] 2 1 3 3 2 3 2 2 2 3 3 1 3 1 3 3 3 2 2 2 2 2 3 2 3 3 2 3 3 2 3 3 1 1 3 3
## [16777] 3 3 1 2 3 2 2 2 3 2 2 2 1 3 2 2 3 3 2 2 2 3 3 1 1 1 2 2 2 3 3 2 2 2 2 2
## [16813] 2 2 3 2 3 2 2 2 2 2 2 2 3 3 3 2 1 1 3 3 2 3 2 2 2 1 2 2 1 2 2 3 2 2 2 1
## [16849] 1 2 3 2 1 3 3 3 3 3 2 3 3 2 3 3 2 1 2 3 2 2 3 3 2 3 2 2 3 3 2 3 3 1 3 2
## [16885] 3 2 2 3 3 2 2 2 3 2 3 1 3 2 3 3 3 3 2 2 3 3 1 3 1 2 2 2 1 2 3 2 2 1 2 2
## [16921] 2 2 3 2 2 3 2 1 3 3 3 2 3 3 2 2 2 3 3 1 3 3 3 2 2 2 2 2 2 1 2 2 3 1 3 2
## [16957] 3 3 3 2 3 3 3 2 3 2 1 3 3 1 2 3 3 2 2 2 3 3 3 2 3 3 1 3 2 3 3 3 3 3 2 2
## [16993] 1 2 2 3 1 2 3 3 1 1 3 2 2 3 3 3 3 2 2 3 2 1 2 1 3 2 2 3 2 3 2 2 2 1 2 2
## [17029] 2 2 3 3 2 2 2 2 3 1 2 2 2 3 1 1 3 3 3 3 3 2 2 2 2 2 2 3 1 2 3 3 3 3 2 3
## [17065] 3 3 3 2 1 2 2 3 2 3 1 2 2 3 3 2 1 3 3 3 3 2 2 2 2 3 3 3 3 2 1 2 2 3 3 1
## [17101] 3 3 1 2 3 3 2 3 2 3 2 3 2 2 3 1 3 2 3 3 2 3 3 1 3 3 2 2 3 2 2 2 1 2 2 1
## [17137] 2 2 2 3 2 3 2 2 1 3 3 1 1 3 3 1 2 2 3 2 3 2 3 2 1 2 3 3 3 1 3 2 3 3 2 3
## [17173] 2 2 2 1 2 3 2 3 3 3 1 3 3 2 3 3 3 1 3 1 3 3 2 3 3 2 2 2 3 3 3 3 3 3 1 3
## [17209] 1 2 3 1 1 2 2 3 2 2 2 3 3 2 2 2 2 2 3 2 1 2 2 2 3 3 2 3 3 2 3 3 1 3 3 2
## [17245] 2 2 2 1 1 3 2 1 3 1 3 2 3 3 2 2 2 2 3 2 1 2 1 3 2 3 3 2 3 2 2 2 3 2 1 2
## [17281] 2 3 2 1 2 2 2 2 2 2 2 3 2 3 2 2 2 3 3 2 2 2 1 3 3 3 3 3 3 2 1 3 3 2 1 3
## [17317] 3 1 1 2 3 2 1 2 2 2 1 3 2 2 3 3 3 2 1 3 2 1 3 2 2 1 1 2 2 3 2 2 3 1 3 3
## [17353] 2 2 2 3 3 3 3 3 1 2 2 3 3 3 2 2 3 2 3 2 1 2 3 1 3 2 3 2 3 2 3 2 1 2 2 2
## [17389] 2 2 3 3 2 2 2 3 2 1 3 1 2 2 3 2 3 2 2 2 2 3 2 3 3 3 3 2 3 2 3 3 3 3 3 2
## [17425] 3 2 3 2 2 3 2 2 3 3 3 1 2 2 2 1 3 3 3 3 3 2 3 2 2 1 2 2 3 2 1 2 3 2 3 3
## [17461] 3 1 2 2 3 3 3 3 2 3 2 2 3 3 1 2 2 2 1 2 3 2 2 2 2 1 2 3 2 2 1 3 2 2 2 1
## [17497] 2 2 3 2 2 3 2 3 1 2 2 3 3 3 3 2 3 3 2 3 1 2 3 1 3 3 1 3 2 3 3 1 3 2 3 1
## [17533] 1 3 3 3 2 3 3 3 3 3 2 3 3 3 1 2 2 3 3 3 3 3 1 3 2 3 2 3 3 2 2 3 2 1 3 2
## [17569] 1 3 2 2 1 2 2 3 3 3 2 2 1 2 3 1 3 3 2 3 3 3 2 3 3 3 3 2 3 3 3 3 3 2 1 3
## [17605] 2 2 2 2 3 1 3 3 3 1 2 3 3 2 3 3 2 2 3 3 2 2 2 1 1 3 3 1 2 2 1 1 3 2 3 1
## [17641] 1 2 2 3 2 2 2 3 1 3 3 1 1 2 3 2 3 3 1 2 2 2 2 2 2 3 2 3 2 2 2 2 2 2 3 3
## [17677] 2 3 2 1 3 2 3 3 3 2 1 3 1 2 2 2 2 2 3 3 1 3 2 2 3 2 3 3 2 2 3 3 3 3 3 2
## [17713] 3 2 3 3 1 2 1 1 3 2 3 1 2 3 2 2 3 2 1 3 3 2 1 3 2 1 3 3 3 1 2 2 2 2 1 3
## [17749] 2 3 3 3 2 2 1 3 3 2 3 3 2 3 3 2 2 3 3 3 2 3 2 2 3 3 3 3 1 2 2 3 2 3 1 2
## [17785] 3 2 1 1 2 2 1 3 3 3 2 3 2 3 2 1 2 3 3 1 2 2 2 3 3 1 3 2 3 2 2 3 2 3 2 3
## [17821] 3 2 2 3 2 2 2 3 3 1 2 2 2 3 2 3 2 1 2 2 2 2 3 2 1 2 2 2 3 2 2 1 2 2 3 3
## [17857] 3 3 3 2 2 3 1 3 1 3 3 3 3 2 3 3 2 2 2 2 3 3 3 3 3 3 2 2 1 3 3 2 3 2 3 3
## [17893] 2 3 3 3 3 2 2 3 1 1 2 3 3 3 3 2 2 3 1 2 2 3 1 1 2 1 2 1 3 3 2 2 2 3 1 2
## [17929] 3 3 3 1 2 2 1 3 2 2 3 3 3 3 2 2 2 2 3 2 3 2 3 3 1 2 2 3 2 2 2 2 2 2 2 2
## [17965] 2 2 1 3 3 3 2 2 2 2 3 2 3 3 2 2 2 2 1 2 3 2 3 3 3 2 3 1 2 3 3 2 1 1 1 3
## [18001] 2 1 1 3 3 1 2 3 3 2 2 3 2 2 2 3 3 1 1 3 2 2 2 3 2 3 2 2 3 1 2 3 2 1 3 2
## [18037] 1 2 2 2 2 2 3 3 2 3 2 1 2 2 1 3 3 3 3 2 3 2 2 2 2 3 1 2 3 3 2 3 3 1 3 2
## [18073] 2 3 2 3 3 2 3 3 3 3 3 2 3 2 2 1 2 3 2 2 1 3 2 2 3 3 2 3 2 3 3 2 2 3 2 2
## [18109] 3 1 3 3 2 2 2 3 3 3 3 2 3 2 3 2 3 2 2 3 2 3 2 2 3 2 3 2 3 1 2 2 1 2 2 3
## [18145] 2 2 2 2 2 1 2 2 3 2 3 3 3 1 3 3 1 2 2 3 2 1 2 2 1 2 3 2 2 2 2 3 3 2 3 2
## [18181] 3 2 3 3 3 3 2 1 3 2 3 3 1 3 2 2 2 3 2 3 3 2 2 2 2 3 3 1 2 2 2 2 1 1 2 3
## [18217] 3 3 1 3 2 2 2 1 3 3 3 3 3 2 2 2 1 3 2 2 3 3 2 1 2 3 2 2 2 3 2 2 2 2 3 2
## [18253] 3 2 3 2 2 1 3 2 3 3 2 2 2 2 1 1 1 3 1 2 3 2 3 2 2 2 3 2 3 3 2 1 3 2 3 3
## [18289] 3 2 2 1 3 3 3 2 3 2 3 3 3 2 1 3 3 1 1 3 3 2 2 2 2 2 2 2 1 1 3 2 2 1 1 3
## [18325] 3 2 3 3 3 3 2 3 1 1 1 3 3 3 1 1 2 2 2 3 3 3 3 2 1 2 2 3 3 2 2 2 3 3 3 1
## [18361] 2 3 2 2 2 2 3 3 3 3 3 1 3 2 2 3 1 2 2 2 3 1 2 1 3 1 2 1 2 3 2 3 3 1 2 2
## [18397] 3 3 2 3 2 2 3 2 3 3 1 2 2 1 1 2 3 1 2 3 1 3 2 2 3 2 2 2 1 3 2 3 2 3 3 2
## [18433] 2 2 3 3 3 1 2 2 2 2 2 1 2 3 2 3 2 3 1 2 3 2 2 2 1 3 2 3 1 2 3 3 2 3 2 2
## [18469] 2 2 3 3 2 1 2 2 3 3 3 3 2 2 3 3 2 3 2 3 2 3 2 2 3 3 3 2 3 3 1 1 1 3 3 3
## [18505] 3 2 2 2 2 2 2 2 2 3 2 3 2 1 3 1 2 2 1 2 1 2 1 3 3 3 3 3 2 2 2 3 2 2 2 2
## [18541] 3 1 1 3 1 3 2 3 3 3 2 1 3 2 1 2 2 2 2 3 3 3 3 3 1 2 3 3 2 3 3 1 2 2 1 1
## [18577] 1 3 2 2 2 3 2 3 2 3 2 2 3 3 2 3 2 1 1 3 3 2 2 2 3 2 2 2 3 1 1 3 3 3 1 3
## [18613] 2 2 2 1 2 3 3 3 2 2 3 3 3 1 3 3 3 3 3 2 3 2 1 3 2 2 3 3 3 1 2 2 3 1 3 2
## [18649] 1 3 3 1 2 3 2 2 3 1 1 2 3 2 2 2 2 1 2 3 2 3 2 1 1 2 1 2 2 3 3 2 3 3 3 2
## [18685] 3 2 2 3 3 2 3 3 2 3 2 2 3 2 2 3 2 2 2 1 2 2 3 3 3 3 2 2 1 3 1 3 3 2 3 3
## [18721] 2 3 2 2 3 2 2 3 3 3 3 2 3 3 3 2 3 3 3 2 3 2 2 2 2 2 2 3 3 2 3 2 2 3 2 3
## [18757] 2 2 2 3 1 2 3 3 3 3 3 3 2 2 2 1 2 1 3 3 1 3 2 1 1 2 1 2 2 3 2 3 1 3 3 3
## [18793] 3 1 2 2 3 2 3 3 3 1 2 3 3 3 1 3 3 3 1 3 2 2 3 3 1 1 2 2 1 1 2 3 3 3 2 3
## [18829] 1 2 1 2 3 3 2 1 3 3 2 2 3 1 3 3 2 3 2 3 2 1 2 2 2 3 2 3 3 2 2 3 2 2 3 3
## [18865] 3 2 2 3 3 2 2 3 3 3 3 2 2 3 3 2 1 2 3 2 1 2 3 2 3 2 3 2 3 2 3 1 2 3 3 2
## [18901] 2 3 3 3 2 2 3 3 2 3 1 3 3 2 3 3 3 3 2 2 3 3 2 2 2 3 2 1 3 3 3 3 2 2 1 2
## [18937] 2 2 2 3 2 3 3 2 2 2 2 2 2 3 2 1 2 3 2 2 3 2 2 3 1 3 2 3 3 2 3 1 2 3 2 1
## [18973] 3 2 2 3 3 1 2 2 3 2 3 2 2 2 2 3 3 2 3 3 1 3 2 3 3 2 3 1 2 1 2 2 3 2 3 3
## [19009] 2 2 2 2 3 3 2 3 2 3 2 3 1 1 1 1 3 1 2 2 3 1 3 3 3 1 2 3 3 3 2 2 1 2 1 2
## [19045] 2 2 3 2 3 2 1 3 3 2 2 1 2 2 1 2 2 2 2 3 3 1 2 3 2 3 2 3 3 2 2 2 3 2 2 2
## [19081] 1 2 3 3 3 2 3 2 2 3 3 3 2 3 3 3 2 3 3 1 1 3 2 2 3 3 1 3 2 1 1 2 2 2 3 3
## [19117] 2 2 2 1 2 2 3 1 2 2 3 3 2 1 3 2 2 2 2 1 3 2 3 3 3 2 2 1 2 2 3 3 2 2 1 1
## [19153] 2 3 3 2 3 3 2 3 1 2 3 3 1 3 3 2 3 2 2 2 3 2 3 2 3 3 2 2 3 3 1 2 3 3 2 3
## [19189] 2 2 3 3 1 2 1 3 2 2 2 3 3 3 3 2 3 3 2 3 3 3 2 2 2 2 2 2 2 3 3 1 3 2 3 2
## [19225] 3 2 3 1 2 3 2 3 2 2 2 2 2 3 2 3 2 3 3 1 2 1 2 3 3 3 2 2 2 2 2 3 1 2 1 1
## [19261] 3 2 3 2 2 3 2 2 2 3 2 3 3 3 2 1 3 1 3 2 3 1 2 2 3 3 3 2 2 3 3 2 3 2 3 3
## [19297] 3 1 3 2 1 1 3 1 3 2 2 2 3 2 1 3 2 2 3 3 2 3 3 1 2 3 1 1 2 2 2 3 2 2 3 2
## [19333] 3 1 3 2 2 2 2 2 2 2 3 1 3 2 1 2 3 1 1 2 2 2 2 2 1 2 3 3 2 1 3 1 3 3 1 3
## [19369] 3 3 3 3 1 2 3 2 1 3 1 2 3 2 2 3 2 2 3 2 2 2 2 3 2 3 3 2 3 2 2 3 2 1 3 2
## [19405] 3 2 2 3 3 3 2 3 2 3 3 3 2 3 3 3 3 2 2 1 3 2 3 3 3 2 2 1 1 2 2 3 2 2 2 1
## [19441] 2 1 1 2 2 2 3 3 1 1 2 2 3 3 2 2 2 1 3 3 3 2 3 3 3 2 3 3 3 2 2 2 2 1 3 2
## [19477] 2 2 2 2 2 1 3 2 2 3 3 2 3 1 2 3 3 3 3 2 1 1 3 1 3 3 2 2 2 3 2 2 3 3 2 3
## [19513] 2 2 2 1 3 2 3 2 2 3 3 3 3 2 3 2 3 2 3 1 2 2 2 1 3 2 2 3 2 3 3 2 2 2 3 3
## [19549] 2 2 2 2 3 3 3 2 3 2 3 2 3 3 3 3 2 3 1 2 2 3 2 2 3 3 3 3 3 3 1 3 3 3 3 2
## [19585] 3 2 3 2 2 2 2 1 1 2 2 2 3 3 1 2 2 2 2 3 3 3 1 3 3 3 2 3 2 2 3 3 2 2 2 2
## [19621] 2 3 2 2 2 2 2 2 3 1 3 3 3 3 2 3 2 2 1 2 2 1 2 1 3 3 3 2 2 3 1 3 2 3 1 2
## [19657] 1 2 2 3 3 2 3 2 3 2 3 3 3 3 2 3 3 2 1 2 1 2 2 2 2 2 3 3 1 3 2 3 2 2 1 2
## [19693] 2 3 2 1 3 2 2 3 3 3 2 3 2 2 2 3 2 2 1 2 2 1 1 2 2 3 2 3 2 3 2 2 3 3 2 3
## [19729] 2 2 3 2 3 2 1 2 3 2 3 2 2 3 1 3 2 3 2 3 2 3 3 2 2 3 1 2 2 2 3 3 2 1 2 3
## [19765] 2 2 2 1 3 2 3 3 3 2 2 2 3 2 2 2 3 3 2 2 3 1 2 2 2 2 1 3 3 2 3 2 3 3 3 2
## [19801] 2 1 1 3 1 2 3 2 3 3 3 2 3 2 3 2 2 3 3 1 2 3 2 1 2 3 2 3 1 3 2 1 3 2 2 3
## [19837] 1 3 2 2 3 2 1 2 2 2 1 2 3 3 1 3 3 2 2 2 3 3 3 2 1 3 3 3 3 1 3 2 2 2 2 3
## [19873] 1 1 3 2 2 2 3 3 2 2 2 3 1 2 2 3 3 3 1 3 3 2 2 1 1 2 2 1 3 2 3 3 1 2 2 3
## [19909] 1 2 3 1 2 2 2 2 2 2 1 2 1 3 1 3 3 3 2 2 2 2 2 2 1 2 2 3 2 2 3 2 3 3 3 3
## [19945] 2 2 3 3 1 3 2 2 1 3 3 2 2 3 2 1 3 1 1 2 3 2 2 3 2 2 2 2 3 3 2 2 2 3 3 3
## [19981] 3 2 3 3 3 3 3 3 2 2 1 3 3 3 2 3 2 2 3 2 2 2 3 1 1 1 3 2 2 2 2 3 2 2 2 1
## [20017] 3 3 2 2 3 2 2 2 1 2 2 2 3 3 2 1 2 1 2 2 3 3 2 3 3 3 2 3 2 2 3 2 3 2 2 2
## [20053] 2 3 3 3 2 3 3 1 2 3 2 3 2 2 2 3 2 2 3 3 3 1 3 3 2 1 2 2 1 2 3 3 2 1 2 2
## [20089] 2 2 2 3 2 3 1 3 2 3 3 2 2 2 3 3 3 3 1 2 3 1 3 2 3 1 2 3 3 3 1 2 3 2 1 3
## [20125] 3 2 3 3 2 2 3 3 2 3 1 3 3 2 2 2 3 3 2 2 3 3 3 1 2 2 1 2 2 2 3 2 3 2 2 2
## [20161] 1 3 2 1 1 2 3 2 3 3 2 2 2 2 1 2 3 2 2 3 3 3 2 1 2 2 2 2 2 2 3 2 3 2 2 2
## [20197] 2 2 2 2 3 2 2 2 2 2 2 2 1 3 3 3 2 3 2 3 1 3 2 3 2 3 2 3 2 3 2 2 2 3 2 3
## [20233] 2 2 1 2 3 1 3 3 3 2 3 3 3 3 3 3 2 3 2 2 2 3 3 2 3 2 2 3 2 3 2 2 2 3 2 2
## [20269] 2 2 1 2 1 3 1 3 2 1 3 2 2 2 2 2 2 3 3 3 2 3 2 3 3 2 2 3 3 1 2 2 3 2 2 1
## [20305] 3 2 3 2 2 3 2 3 2 3 1 2 2 2 3 3 1 2 2 1 1 3 2 2 3 1 3 3 2 3 1 1 2 1 2 3
## [20341] 1 3 3 2 3 3 2 1 3 3 3 3 2 3 2 3 2 3 3 2 3 3 2 1 3 2 3 3 2 3 3 2 3 2 2 2
## [20377] 1 2 1 3 1 1 2 2 3 3 3 2 2 3 3 2 2 3 3 2 2 1 2 3 2 1 3 2 2 2 3 2 3 2 2 1
## [20413] 1 1 1 2 2 2 3 2 2 2 3 2 3 2 3 2 3 2 3 3 2 2 2 2 3 3 2 3 1 2 3 3 3 2 1 3
## [20449] 3 2 3 2 2 2 3 2 2 2 2 2 2 2 3 2 2 1 1 3 3 3 3 1 2 2 2 2 2 3 3 3 2 1 1 2
## [20485] 3 3 3 3 2 2 2 2 2 1 3 1 3 2 2 3 2 2 3 2 3 1 1 2 3 1 2 2 1 2 2 2 2 3 3 3
## [20521] 2 2 2 2 2 2 3 2 3 2 2 1 2 2 3 3 3 2 2 2 1 1 2 3 2 3 3 2 2 3 2 2 3 2 2 3
## [20557] 3 3 2 3 2 2 3 3 1 3 3 2 1 2 2 3 2 2 1 2 3 2 3 2 2 2 3 1 2 2 3 2 2 2 3 3
## [20593] 1 1 3 2 3 3 1 3 2 2 2 2 2 2 3 1 2 2 3 3 3 3 3 2 3 2 1 1 2 2 2 2 3 3 1 3
## [20629] 2 2 2 3 3 1 3 3 3 2 1 3 3 2 3 3 3 2 3 2 2 3 3 3 2 2 3 2 2 2 3 3 2 2 2 3
## [20665] 2 3 2 3 3 3 2 3 3 2 1 3 2 3 2 2 3 2 2 2 3 2 1 3 3 3 3 1 3 2 3 3 2 3 3 3
## [20701] 3 3 3 3 2 2 1 2 2 1 1 3 2 2 2 1 2 1 1 2 3 1 2 3 3 1 2 2 3 2 3 3 1 3 2 3
## [20737] 3 3 1 3 2 3 3 3 3 3 3 1 2 1 2 1 1 3 2 3 2 2 3 3 3 3 3 3 3 3 2 2 1 3 3 3
## [20773] 1 3 2 1 3 1 3 3 2 3 2 3 1 2 1 3 3 3 2 3 3 1 3 3 1 3 3 2 2 2 3 2 2 3 2 3
## [20809] 2 3 2 3 2 2 2 2 3 2 3 3 2 2 2 3 3 2 2 3 3 3 3 2 3 3 1 3 2 3 2 2 2 2 3 2
## [20845] 1 1 2 2 1 2 1 2 2 3 3 3 2 1 2 3 3 3 3 1 2 3 3 3 2 2 2 3 2 2 3 2 2 2 2 1
## [20881] 3 1 3 2 3 3 3 3 3 1 3 2 3 1 3 1 2 1 1 1 3 2 2 3 2 2 3 2 2 2 3 1 2 2 2 3
## [20917] 2 2 3 1 3 3 3 3 1 2 3 2 3 3 3 2 3 3 2 2 3 3 2 2 2 2 2 2 2 2 3 2 2 3 3 1
## [20953] 1 3 3 1 3 1 2 3 1 1 2 1 2 2 3 2 3 2 1 2 2 1 3 3 1 3 2 2 2 2 3 2 2 3 3 1
## [20989] 3 2 2 2 3 3 3 1 3 3 3 1 1 1 2 3 2 2 2 3 3 2 3 2 2 2 2 2 2 2 2 2 2 1 3 1
## [21025] 2 2 1 2 3 3 2 2 3 3 2 3 3 2 2 3 3 3 2 3 2 1 2 3 3 2 3 2 2 1 1 3 2 2 2 3
## [21061] 2 3 2 3 2 2 3 2 3 2 2 3 3 3 2 1 1 3 3 2 3 2 3 2 2 2 2 2 1 2 3 2 3 2 3 3
## [21097] 1 1 2 3 3 1 2 2 3 2 3 1 2 3 3 2 2 2 2 2 2 3 3 3 3 2 2 1 2 2 3 2 2 3 3 2
## [21133] 1 2 3 2 3 2 2 3 2 3 3 1 3 2 3 3 2 1 3 3 1 3 2 1 3 2 2 2 3 3 3 3 2 2 3 1
## [21169] 2 3 2 3 2 2 2 1 2 2 2 2 2 3 2 3 3 3 3 2 2 1 3 2 3 2 1 2 3 2 3 2 2 3 3 2
## [21205] 2 2 3 2 2 3 2 3 3 2 3 2 2 2 2 2 3 1 2 1 2 1 3 2 2 2 3 1 2 2 2 2 2 3 2 2
## [21241] 2 2 2 3 3 2 3 2 2 2 3 3 3 3 3 3 2 1 2 1 2 2 2 3 2 2 2 3 2 3 2 3 3 3 1 3
## [21277] 3 3 2 2 2 3 2 3 1 3 1 2 2 3 2 3 2 2 3 2 1 3 3 2 3 3 2 3 3 3 1 3 3 3 3 2
## [21313] 2 1 2 3 1 3 2 3 3 3 3 2 3 2 1 2 2 2 3 2 3 2 3 2 1 2 3 3 2 3 3 3 1 2 3 1
## [21349] 2 3 3 3 3 2 2 1 2 1 3 3 3 3 3 2 3 2 1 2 2 2 2 3 2 1 2 2 1 1 2 2 3 1 3 2
## [21385] 2 3 3 1 3 2 2 2 2 3 3 2 2 3 2 3 1 1 1 3 1 1 3 2 2 3 3 1 2 2 2 2 3 2 3 2
## [21421] 2 3 1 1 2 3 1 3 1 2 2 3 1 2 3 3 2 2 2 2 3 1 3 2 1 2 3 2 1 2 3 1 1 3 3 1
## [21457] 3 1 2 2 1 2 2 2 2 3 3 2 3 2 2 3 2 2 1 2 3 2 2 2 2 3 3 3 3 3 2 3 3 2 3 2
## [21493] 2 3 3 2 2 1 2 3 2 3 2 2 3 2 3 3 2 3 2 2 3 3 2 1 2 3 2 1 2 2 2 3 2 3 2 3
## [21529] 2 3 3 3 3 3 2 2 2 2 2 2 2 1 2 3 3 2 2 2 3 2 2 1 3 1 3 3 2 2 1 3 2 2 2 2
## [21565] 2 2 1 2 3 3 1 2 1 1 2 2 3 3 3 2 1 2 3 3 3 3 2 2 3 1 2 3 3 2 3 3 3 2 2 1
## [21601] 3 3 2 2 2 1 2 3 1 2 2 3 2 3 1 3 2 3 3 2 1 2 3 3 3 2 1 2 2 2 3 2 2 2 3 3
## [21637] 1 2 1 3 3 3 2 1 3 1 3 3 2 1 2 2 3 2 3 1 2 2 2 2 2 2 3 1 2 1 2 3 3 1 2 1
## [21673] 2 1 2 3 2 2 3 2 3 2 2 1 3 3 3 2 1 3 3 1 2 2 3 3 2 1 3 3 2 2 2 3 3 1 3 2
## [21709] 2 2 2 2 3 1 2 1 2 3 2 1 3 3 1 3 3 3 3 3 2 2 2 2 3 2 1 1 2 2 1 2 2 2 2 2
## [21745] 2 2 2 2 3 3 2 2 2 3 3 3 3 1 3 3 2 3 2 2 2 2 2 2 2 2 1 1 2 2 2 1 3 3 3 3
## [21781] 2 2 3 2 2 3 3 3 2 3 2 2 2 3 3 1 2 3 2 2 1 2 2 3 2 3 2 1 3 2 3 3 3 1 3 3
## [21817] 2 3 2 3 3 3 3 3 2 3 2 2 3 1 3 3 2 2 1 2 3 2 2 2 3 2 2 1 2 3 3 1 1 3 1 3
## [21853] 3 3 2 3 2 1 3 1 3 3 1 1 2 3 2 2 3 1 2 1 3 3 3 3 2 3 1 3 2 3 1 3 2 1 2 1
## [21889] 2 2 2 2 3 3 3 2 2 3 2 2 3 3 3 3 2 1 1 2 3 2 1 3 2 2 2 2 3 2 3 3 2 2 2 2
## [21925] 3 2 3 2 1 1 3 1 3 3 2 3 3 2 1 1 2 2 3 1 2 3 2 3 3 3 3 2 1 2 3 3 2 3 2 2
## [21961] 2 3 2 3 2 3 2 2 2 3 3 2 2 2 2 3 2 2 3 3 2 2 2 2 3 2 3 2 2 3 2 2 1 3 2 3
## [21997] 2 2 2 3 2 3 2 2 3 3 2 3 3 3 3 1 1 2 1 3 2 3 3 1 3 2 1 3 3 2 2 2 2 1 2 1
## [22033] 1 1 2 3 1 3 1 3 3 3 2 2 2 2 3 3 2 3 1 3 3 3 3 2 2 1 3 1 2 3 2 3 3 2 2 2
## [22069] 3 3 2 2 2 3 2 1 3 2 2 2 3 3 3 2 1 2 1 2 2 2 2 3 3 3 2 1 3 2 3 2 2 2 2 3
## [22105] 3 3 3 1 3 2 3 2 1 3 1 3 3 2 3 3 2 3 2 3 1 3 1 2 1 3 2 3 3 3 2 1 2 2 2 3
## [22141] 2 2 2 3 3 2 3 1 2 3 3 2 1 3 2 3 2 2 1 1 2 2 3 2 2 3 2 1 3 3 2 2 2 2 2 3
## [22177] 3 3 2 2 1 3 1 3 1 2 2 3 3 1 2 3 2 2 2 3 1 3 3 3 1 2 3 3 2 3 3 2 1 3 3 2
## [22213] 3 2 2 2 2 3 3 3 3 3 1 3 2 2 3 3 3 1 3 3 2 3 2 3 3 3 1 3 3 2 2 3 2 3 1 1
## [22249] 2 3 3 3 3 2 2 2 3 2 1 2 1 3 3 1 3 2 3 2 3 1 3 3 3 3 1 2 1 2 3 2 1 3 1 3
## [22285] 1 3 3 3 3 3 3 1 2 1 2 3 2 3 2 2 2 3 1 2 3 2 3 3 2 3 3 2 2 3 2 3 3 2 3 2
## [22321] 3 2 3 2 2 2 2 2 3 2 2 3 2 2 3 1 3 1 2 1 1 3 2 3 3 2 1 2 3 1 2 3 3 2 3 3
## [22357] 2 2 2 3 3 3 3 3 2 3 2 1 2 2 3 2 1 2 2 3 2 2 2 3 1 2 2 2 3 3 3 2 3 1 3 2
## [22393] 3 3 3 3 2 2 2 3 3 2 2 2 3 2 1 1 1 2 2 2 2 2 3 3 2 3 2 3 2 2 3 2 2 3 1 2
## [22429] 3 2 3 2 2 2 2 2 3 2 1 3 2 2 2 3 1 2 3 3 1 2 3 3 3 3 1 2 1 3 2 2 3 3 2 3
## [22465] 2 3 3 2 1 2 3 2 3 2 3 2 2 2 2 2 2 1 2 3 1 2 2 3 3 2 1 2 1 3 2 2 2 1 3 2
## [22501] 3 2 3 3 2 3 1 3 3 3 3 3 2 1 2 3 2 2 2 3 2 1 2 2 3 3 3 1 2 2 2 1 2 1 2 2
## [22537] 3 1 2 1 3 2 3 2 2 2 2 3 2 3 2 2 3 1 3 2 2 2 2 2 3 3 2 3 2 1 2 3 3 3 3 2
## [22573] 1 1 3 3 2 3 2 2 2 3 3 2 3 3 3 3 3 3 2 2 2 2 2 3 3 3 2 2 2 2 2 3 3 2 3 3
## [22609] 1 3 1 2 3 3 2 2 3 2 2 3 2 3 3 3 1 2 2 2 1 3 3 3 3 3 3 2 3 2 2 3 3 3 1 2
## [22645] 2 2 3 2 3 3 3 3 2 3 1 2 2 1 3 3 2 2 1 2 3 2 2 1 3 3 2 2 3 2 2 3 3 2 2 2
## [22681] 1 2 2 2 2 2 3 3 2 3 2 1 3 2 2 1 1 3 3 3 2 3 3 2 2 3 2 2 3 3 2 3 1 1 1 2
## [22717] 3 2 3 1 3 2 1 3 2 2 3 2 3 2 3 1 2 3 3 2 2 1 3 2 2 2 2 3 2 3 2 3 2 3 2 3
## [22753] 3 1 3 2 3 1 2 3 3 2 1 2 3 2 3 2 2 3 2 3 3 2 3 3 1 3 3 3 3 1 3 2 1 3 2 2
## [22789] 3 2 2 3 1 3 2 1 2 1 3 2 3 1 2 3 1 3 2 2 1 3 2 3 2 1 3 3 2 2 3 2 3 1 2 2
## [22825] 3 3 1 3 2 2 2 2 3 2 3 3 2 3 3 2 2 3 2 1 2 1 2 2 2 2 2 1 3 3 2 3 3 1 2 3
## [22861] 2 2 3 3 3 3 3 1 1 3 1 2 2 2 2 2 2 1 3 2 3 2 3 2 2 3 2 2 2 3 3 2 2 3 2 2
## [22897] 3 2 3 1 2 3 1 1 3 2 2 3 1 2 3 2 2 3 1 3 2 1 3 3 2 2 1 3 3 2 3 2 2 2 2 3
## [22933] 2 2 3 2 3 3 2 2 3 2 3 1 2 3 2 1 3 1 1 2 2 3 2 3 2 2 3 3 2 3 2 3 2 2 1 3
## [22969] 3 3 1 2 2 2 2 3 3 2 3 3 2 2 3 2 2 2 3 2 3 3 2 3 2 3 3 2 2 3 3 2 2 3 2 2
## [23005] 2 3 3 3 3 2 2 1 2 3 3 1 3 3 1 1 2 2 2 2 2 2 2 3 1 3 2 3 3 1 2 3 3 2 3 3
## [23041] 1 2 2 2 1 2 3 2 3 2 3 2 2 2 2 2 2 3 3 3 1 3 2 2 3 2 3 3 2 2 3 2 3 3 3 3
## [23077] 3 1 2 1 3 3 2 2 2 3 3 3 3 3 2 2 2 3 3 2 3 3 2 2 3 1 3 2 3 2 3 2 2 2 3 3
## [23113] 3 2 1 2 3 3 3 1 1 2 1 1 3 3 2 3 3 1 2 2 3 3 1 3 1 2 1 2 1 2 2 1 2 1 2 2
## [23149] 2 2 3 3 3 2 2 2 2 1 3 2 3 3 2 3 2 3 3 2 2 2 3 1 3 2 3 2 2 2 3 3 3 2 3 2
## [23185] 2 3 3 1 2 2 2 2 2 2 3 2 2 3 3 2 3 3 3 3 3 2 3 3 2 2 3 3 1 2 1 1 3 2 2 2
## [23221] 3 3 2 3 3 3 2 3 3 2 2 3 1 3 2 3 2 2 3 3 3 3 2 2 2 3 2 2 2 2 2 3 2 3 3 2
## [23257] 2 2 2 2 1 3 2 2 3 2 3 3 2 2 3 3 1 1 2 3 2 1 2 2 2 3 2 3 3 3 2 3 2 3 2 3
## [23293] 2 1 3 2 2 3 3 2 2 3 2 2 3 3 2 2 2 2 3 2 2 2 2 3 2 1 3 2 3 3 2 1 3 3 1 3
## [23329] 1 2 3 3 3 3 2 2 3 3 2 3 1 2 2 3 3 3 1 2 3 1 2 2 1 3 2 3 3 3 3 3 2 3 3 1
## [23365] 3 3 2 2 3 3 1 3 3 3 3 2 2 3 2 2 1 3 2 2 3 2 3 2 1 3 1 3 1 2 2 3 2 2 3 3
## [23401] 3 1 2 2 2 3 3 2 2 3 2 1 1 2 2 3 1 1 1 1 2 3 2 3 2 3 3 1 2 2 1 2 3 3 2 3
## [23437] 3 2 2 3 2 2 2 2 2 2 3 2 3 2 3 2 2 2 3 2 2 2 3 3 2 3 3 2 2 2 3 2 1 2 2 1
## [23473] 2 2 3 2 2 3 3 3 2 3 2 2 2 2 2 2 1 2 3 2 1 1 3 2 3 2 2 2 3 3 3 3 2 1 2 2
## [23509] 2 2 2 2 2 1 3 3 2 3 3 2 2 2 1 1 3 3 2 2 2 2 2 2 2 1 1 2 2 2 2 3 2 3 3 2
## [23545] 3 2 2 1 2 3 2 1 2 2 2 3 2 3 3 2 2 1 2 2 3 2 1 2 3 2 2 3 1 3 2 3 3 3 2 3
## [23581] 3 1 2 2 1 1 2 2 3 2 1 2 2 3 2 3 1 1 1 2 2 2 3 3 1 2 2 3 2 3 2 1 3 3 2 3
## [23617] 1 3 2 3 1 3 3 2 2 2 3 2 2 2 2 3 3 3 3 3 3 2 3 1 3 3 2 2 3 1 3 3 3 2 3 2
## [23653] 3 2 3 1 2 2 2 1 3 1 3 3 2 3 3 2 3 2 2 2 2 2 3 2 2 2 1 2 3 2 3 2 1 3 3 1
## [23689] 2 3 2 3 3 1 3 3 3 3 3 2 1 3 1 2 2 2 3 2 2 2 3 3 1 2 3 2 3 3 3 2 2 3 2 3
## [23725] 2 3 3 3 3 2 3 2 3 3 3 1 2 3 1 2 2 2 2 3 2 1 2 2 3 2 3 1 3 3 3 2 2 3 2 3
## [23761] 3 1 3 3 3 1 2 2 1 1 1 3 2 3 3 2 3 2 3 3 2 2 1 2 2 2 3 3 3 3 2 2 3 3 3 3
## [23797] 2 3 3 3 1 3 2 2 1 3 1 3 3 2 3 1 2 1 3 1 3 2 3 2 2 1 3 3 3 2 2 3 3 3 2 3
## [23833] 3 3 2 3 1 3 3 2 3 3 3 2 2 1 2 3 2 3 3 1 2 3 2 3 3 1 2 3 3 3 2 3 2 3 2 2
## [23869] 3 2 3 3 2 3 2 2 3 3 2 2 2 1 2 2 2 2 3 1 2 2 2 1 3 3 2 2 3 3 2 2 3 3 2 3
## [23905] 3 2 3 2 3 3 2 2 3 1 3 2 2 2 2 2 2 3 2 2 1 3 1 3 2 2 2 1 3 3 3 2 3 3 2 2
## [23941] 2 1 1 2 3 1 2 1 3 2 2 2 1 3 3 2 1 1 3 2 3 1 3 3 3 2 2 3 3 3 2 2 2 3 2 3
## [23977] 2 3 1 3 1 3 2 3 2 2 2 3 2 1 2 1 2 2 1 2 3 2 3 1 2 3 1 2 3 2 3 3 1 2 3 3
## [24013] 1 2 2 3 3 2 2 3 3 1 3 2 3 1 1 3 2 2 2 3 2 2 1 3 3 3 2 2 2 3 3 2 3 2 3 2
## [24049] 3 2 2 3 2 2 2 3 3 1 3 2 2 3 3 3 2 3 2 3 1 1 3 1 3 2 3 1 2 2 1 3 3 3 3 3
## [24085] 2 1 2 2 3 2 3 2 3 2 3 1 2 1 3 2 3 2 3 3 2 2 3 2 2 2 2 3 2 1 3 2 2 1 2 2
## [24121] 2 3 2 3 3 2 3 2 3 3 2 2 1 2 3 2 2 3 2 1 2 2 3 2 3 2 3 2 2 2 2 2 3 2 1 3
## [24157] 3 2 3 2 3 2 1 2 2 3 3 2 3 1 2 2 1 3 2 2 2 3 1 3 3 3 2 3 3 3 2 3 2 2 2 3
## [24193] 1 2 3 3 3 2 3 2 2 1 3 3 2 1 1 2 2 3 2 3 2 3 2 1 3 2 2 3 3 2 2 1 2 2 3 2
## [24229] 2 2 2 2 2 3 3 3 1 2 2 2 3 2 2 3 2 3 2 1 2 3 3 2 2 2 3 3 3 3 2 2 3 3 3 1
## [24265] 3 3 1 3 3 2 3 1 2 2 2 2 2 2 1 1 2 3 3 1 3 2 3 2 2 2 3 2 2 1 3 2 2 1 3 2
## [24301] 1 2 3 3 2 3 2 2 2 2 3 2 2 2 1 2 3 3 3 3 1 2 3 3 3 2 3 3 2 3 1 3 3 3 1 2
## [24337] 2 3 2 3 3 1 1 2 3 2 2 2 2 2 2 3 3 3 3 3 2 3 2 2 2 3 2 3 3 2 2 2 2 3 2 3
## [24373] 3 2 3 3 3 2 3 3 1 1 2 2 2 1 2 2 2 2 3 3 2 2 2 3 2 2 3 3 3 3 2 3 3 2 2 2
## [24409] 3 2 3 2 3 3 3 2 3 2 3 2 3 2 2 2 1 3 2 1 3 2 3 1 2 2 2 2 2 3 2 3 2 3 1 2
## [24445] 2 2 3 3 3 1 2 1 1 2 2 3 2 1 1 2 3 3 2 2 2 3 1 2 3 3 1 2 2 3 2 3 2 3 1 1
## [24481] 3 3 3 2 2 3 1 3 3 2 3 2 3 3 2 2 3 3 2 2 3 2 3 3 2 2 3 3 3 2 3 3 3 2 3 3
## [24517] 3 2 3 3 2 2 2 3 3 1 1 2 2 1 3 3 1 3 3 2 2 2 3 3 2 2 3 1 3 2 1 1 3 1 3 2
## [24553] 3 2 1 3 2 2 1 3 2 3 3 3 3 2 2 2 3 2 3 2 1 2 2 3 3 2 3 3 3 3 1 2 2 3 3 2
## [24589] 1 3 2 2 1 3 3 3 1 2 3 3 2 1 3 2 1 3 1 3 1 1 3 1 2 3 2 3 3 1 2 3 2 3 3 1
## [24625] 2 2 3 3 3 2 2 3 2 2 2 3 2 2 3 3 2 3 3 3 2 3 2 1 3 2 3 2 3 3 3 2 3 3 2 2
## [24661] 2 3 2 2 2 2 1 3 1 2 3 3 3 1 2 2 2 3 2 3 3 2 1 2 2 2 3 3 2 3 2 3 2 1 3 1
## [24697] 1 1 3 3 2 1 3 1 2 2 1 2 2 1 2 2 3 2 2 3 2 2 3 2 1 3 2 2 2 3 3 3 3 1 3 2
## [24733] 3 1 3 1 2 3 3 3 3 3 1 2 3 3 2 1 3 2 2 1 3 1 3 2 2 3 3 2 2 3 3 2 3 1 1 2
## [24769] 2 2 2 1 3 2 3 2 2 1 3 2 3 1 2 3 2 3 3 3 3 3 3 2 3 3 1 2 3 2 2 2 2 2 2 2
## [24805] 1 3 3 3 2 2 2 3 3 2 2 2 2 2 2 1 2 2 1 3 3 3 3 3 3 3 2 2 3 2 3 2 3 3 1 3
## [24841] 3 2 2 2 2 3 2 1 2 2 2 2 3 3 3 3 3 2 3 3 2 1 3 1 2 3 3 1 2 2 3 3 2 3 2 1
## [24877] 1 2 1 2 3 2 1 3 3 3 1 2 2 3 3 1 3 2 3 2 3 2 2 2 2 3 2 3 2 2 2 1 3 3 3 3
## [24913] 2 2 1 2 3 3 3 3 1 2 2 3 3 2 2 2 2 2 2 2 1 2 2 1 2 1 2 3 2 2 2 1 3 2 2 2
## [24949] 2 1 2 1 1 2 2 3 2 3 3 3 3 2 2 3 2 1 2 2 2 2 3 3 3 1 3 1 2 2 1 2 2 3 1 3
## [24985] 3 3 2 1 2 2 3 2 1 1 3 3 2 1 3 2 3 1 3 1 3 2 3 2 2 3 3 1 1 3 3 1 2 3 3 3
## [25021] 3 2 3 3 2 2 3 1 3 2 3 2 2 3 3 1 3 3 2 2 3 2 2 2 1 3 3 2 3 3 2 1 3 2 3 3
## [25057] 1 2 2 3 2 3 2 3 3 2 2 3 1 3 3 1 2 2 2 2 1 1 3 2 3 3 2 3 3 1 3 2 3 3 1 2
## [25093] 2 3 3 1 2 2 3 2 2 3 2 2 3 2 3 3 2 2 2 2 3 2 1 2 2 3 3 3 3 2 3 3 3 3 3 2
## [25129] 3 1 3 3 1 3 2 3 3 3 3 2 3 2 3 3 2 3 3 3 2 3 3 3 3 3 3 2 2 2 3 3 3 2 3 2
## [25165] 3 3 3 3 1 2 2 3 3 3 2 1 2 3 1 2 1 3 2 1 2 2 3 3 2 1 1 3 2 3 3 3 2 2 2 2
## [25201] 1 3 3 3 2 3 1 2 3 2 2 2 3 2 2 2 3 3 1 2 1 2 2 3 2 3 3 3 1 2 3 2 2 2 2 2
## [25237] 2 2 3 2 2 3 1 2 2 3 3 3 2 3 2 2 3 2 2 3 2 2 1 3 3 2 3 3 2 1 3 2 2 2 3 3
## [25273] 2 2 3 3 2 3 1 3 3 3 2 3 3 3 2 2 3 3 2 2 2 3 3 2 3 3 2 3 2 2 2 2 3 2 3 2
## [25309] 2 2 2 2 2 2 2 3 2 3 3 1 2 2 1 1 1 2 3 2 3 2 2 2 2 2 2 3 3 2 3 3 3 2 3 1
## [25345] 3 3 2 2 3 3 3 3 1 1 2 1 2 3 3 2 2 3 2 2 1 3 3 2 2 2 1 3 3 3 3 2 2 3 2 3
## [25381] 3 1 1 2 2 3 3 2 3 3 3 3 3 2 2 3 3 3 1 2 1 3 3 2 2 3 1 3 1 2 2 3 3 1 2 3
## [25417] 3 2 2 1 1 3 1 3 2 3 3 3 3 1 2 3 2 3 2 2 2 2 1 3 2 2 2 3 2 3 1 3 1 3 3 3
## [25453] 3 2 2 2 3 3 3 2 2 2 3 1 2 2 3 3 2 3 1 3 2 1 3 2 2 2 3 2 3 2 3 3 2 3 3 1
## [25489] 2 3 3 3 2 3 2 3 1 2 3 1 3 3 2 3 2 2 3 3 3 2 2 3 2 3 2 3 3 3 3 1 3 1 1 3
## [25525] 3 2 2 2 2 3 2 3 2 3 2 2 2 2 2 2 1 2 3 3 1 3 3 3 3 2 3 3 1 2 3 2 3 3 3 3
## [25561] 3 3 3 1 3 3 3 2 2 3 3 2 2 2 2 3 3 3 3 3 1 2 2 2 2 3 2 2 2 2 3 2 2 3 2 3
## [25597] 2 2 2 2 3 3 2 2 3 3 2 2 2 2 2 3 3 2 1 2 3 3 3 2 1 2 2 3 2 3 3 1 3 2 3 3
## [25633] 3 1 2 2 3 2 3 2 3 1 3 3 2 2 2 1 3 1 2 2 3 3 2 3 2 2 2 3 3 3 2 2 3 2 3 2
## [25669] 3 2 2 1 3 2 2 3 2 2 3 2 2 3 3 3 3 3 2 2 3 3 2 2 2 3 2 2 3 2 2 3 2 3 2 2
## [25705] 2 3 2 3 1 2 3 2 2 2 3 1 3 3 3 1 3 2 1 2 3 3 2 2 1 2 3 2 3 2 3 3 2 2 3 2
## [25741] 3 3 2 3 1 1 2 2 3 2 2 2 1 2 3 3 3 3 3 3 2 1 3 1 3 2 1 3 3 3 3 1 2 3 3 2
## [25777] 2 3 3 3 3 3 2 3 2 1 3 1 2 2 1 2 2 3 2 3 2 2 2 3 3 3 2 3 2 2 3 2 3 3 1 1
## [25813] 3 2 2 1 3 2 3 2 3 2 2 1 2 3 3 3 3 2 3 2 3 3 2 3 3 2 2 3 3 2 3 1 3 3 3 3
## [25849] 3 2 3 3 2 2 2 2 3 3 2 3 2 3 3 2 3 1 3 2 2 1 1 1 1 2 2 2 3 3 3 3 2 2 1 3
## [25885] 1 3 3 2 3 3 2 2 2 2 1 3 1 1 3 3 1 2 1 2 1 3 2 3 2 3 2 2 2 2 3 3 2 3 3 2
## [25921] 1 3 3 2 1 2 2 3 2 3 2 1 1 3 3 2 3 1 1 2 3 2 2 3 2 1 1 3 2 3 1 2 2 2 1 3
## [25957] 1 3 3 2 1 1 2 2 2 2 2 3 3 2 2 2 3 2 1 2 1 2 1 2 3 3 2 2 3 1 1 3 1 2 3 3
## [25993] 2 2 3 1 2 1 2 2 3 3 3 3 3 3 3 2 3 2 3 2 2 2 1 3 3 3 3 3 3 1 2 3 2 2 3 2
## [26029] 3 2 3 3 1 2 3 2 1 2 2 2 2 2 2 3 2 2 2 2 2 3 2 1 2 3 2 3 2 2 1 3 2 1 3 3
## [26065] 3 1 1 3 2 2 3 3 1 2 3 3 2 3 2 1 3 3 1 3 2 2 3 3 2 2 2 2 1 3 1 3 1 3 2 2
## [26101] 2 3 2 3 1 3 3 3 1 3 2 2 3 3 1 3 3 3 3 2 2 2 2 2 2 2 2 2 2 1 3 1 2 3 2 3
## [26137] 2 2 2 1 1 3 3 2 2 2 3 3 3 1 3 3 3 3 2 2 3 3 2 2 3 2 3 3 3 3 3 1 3 2 1 1
## [26173] 2 2 2 1 2 3 3 3 3 3 3 2 3 3 2 1 2 2 3 3 2 3 3 1 3 3 3 2 3 3 2 2 3 3 2 2
## [26209] 3 2 2 3 3 1 3 2 2 2 2 3 3 2 3 3 1 2 2 3 3 3 3 3 3 2 3 1 3 1 2 3 3 2 1 2
## [26245] 3 2 2 2 1 3 1 1 3 2 2 1 3 1 3 3 1 1 3 2 2 2 2 3 2 3 2 3 3 2 2 2 1 2 2 3
## [26281] 1 2 3 2 1 2 1 2 3 2 3 1 3 2 3 1 3 2 3 2 1 2 2 3 3 2 3 1 2 3 3 3 3 1 3 3
## [26317] 3 2 2 2 3 1 2 1 2 1 2 2 2 3 3 2 2 2 2 2 3 3 2 1 2 2 2 2 3 3 2 3 2 2 3 1
## [26353] 3 2 3 1 3 1 3 3 3 2 2 3 3 2 2 3 2 3 3 2 2 2 1 3 3 2 2 2 2 2 2 3 1 3 2 2
## [26389] 3 2 2 2 2 2 2 3 3 2 2 3 2 3 3 2 2 2 3 2 3 2 2 3 3 3 2 2 2 3 3 2 2 2 3 2
## [26425] 2 3 3 2 2 2 3 3 2 1 2 3 2 2 3 2 3 3 2 1 3 3 3 2 3 2 2 2 1 3 2 2 2 3 2 3
## [26461] 2 3 2 3 3 2 1 3 3 1 3 3 1 3 3 1 2 2 2 2 2 3 1 3 3 3 2 1 1 3 3 2 2 3 3 3
## [26497] 1 2 2 3 3 3 2 3 3 2 3 1 3 3 2 2 3 2 2 3 3 1 2 1 1 3 2 1 2 1 2 2 3 3 3 3
## [26533] 3 2 3 3 2 3 3 3 3 2 1 3 2 2 3 3 2 3 3 3 1 1 3 2 3 3 2 3 2 3 3 1 2 2 2 2
## [26569] 1 3 2 1 3 3 1 2 3 1 1 3 2 1 2 2 2 3 2 3 2 3 2 2 2 2 3 1 2 3 3 2 2 1 1 3
## [26605] 3 2 3 2 3 2 3 2 3 1 3 2 3 3 2 3 2 3 2 2 3 3 2 2 3 3 2 3 3 2 3 3 1 2 3 2
## [26641] 1 3 3 3 2 1 2 3 3 2 2 1 1 2 3 3 2 1 2 3 3 2 3 2 2 3 2 2 2 2 3 3 3 2 3 2
## [26677] 3 3 2 2 2 3 1 3 2 2 1 3 2 2 2 1 3 3 2 3 2 2 1 3 3 3 2 3 1 3 1 1 3 1 1 3
## [26713] 3 3 2 1 2 2 2 1 1 3 3 3 2 2 2 3 1 3 2 3 3 3 2 2 3 1 2 2 3 3 3 1 2 3 2 2
## [26749] 3 2 2 3 3 2 2 3 1 1 3 3 2 3 3 3 3 3 3 1 2 3 1 1 2 2 3 2 2 3 3 2 3 2 2 1
## [26785] 1 3 2 2 3 2 3 3 3 1 2 2 3 3 1 1 2 2 2 3 3 3 3 2 2 2 3 3 2 2 3 1 2 2 3 1
## [26821] 3 2 1 2 1 1 2 2 3 2 1 2 1 3 3 3 2 2 1 1 1 1 2 3 2 3 3 3 3 3 3 2 2 2 2 2
## [26857] 2 3 3 2 3 2 2 2 1 1 3 2 2 1 2 2 1 3 3 2 3 1 2 2 3 2 3 2 3 2 3 2 3 1 2 2
## [26893] 3 3 2 3 2 3 3 2 2 2 2 2 2 1 3 3 2 3 3 3 2 2 3 2 2 2 2 3 3 2 1 2 3 1 3 2
## [26929] 2 3 3 2 3 2 1 2 3 1 2 2 2 1 3 3 1 2 1 2 3 2 3 2 2 2 1 3 2 3 3 3 2 2 1 2
## [26965] 1 3 3 2 3 2 2 1 2 2 2 3 3 3 2 2 3 3 2 2 3 1 3 2 2 3 2 2 3 2 3 1 2 1 1 2
## [27001] 2 3 3 2 1 3 3 1 3 2 2 3 2 3 3 3 3 3 3 2 2 3 2 1 3 2 2 2 2 3 3 2 2 2 3 2
## [27037] 3 2 2 2 3 3 3 2 3 2 2 1 1 3 2 1 1 2 1 2 2 3 2 3 2 3 1 3 3 1 2 2 2 3 3 3
## [27073] 2 3 1 2 2 3 1 3 1 2 2 2 3 2 3 2 3 2 2 2 2 1 2 1 2 2 3 3 2 2 3 2 2 3 3 2
## [27109] 3 2 2 1 2 2 2 2 1 2 3 3 3 2 1 3 2 2 2 2 1 2 3 3 2 3 3 3 3 3 2 1 2 3 1 3
## [27145] 2 2 1 2 3 2 2 3 2 2 2 2 2 3 3 3 2 2 3 3 2 2 3 3 1 3 1 3 2 3 2 3 1 3 1 2
## [27181] 2 3 2 3 3 1 2 3 2 2 3 2 2 3 2 3 3 2 2 2 1 3 3 2 2 3 3 3 3 3 1 2 3 2 2 1
## [27217] 3 3 1 3 3 2 2 3 2 2 1 1 3 2 3 3 3 1 3 3 2 2 2 2 2 2 1 2 3 3 1 3 2 2 2 2
## [27253] 2 2 2 2 3 1 3 1 3 2 2 2 2 2 2 3 2 3 3 2 3 2 2 3 2 2 2 2 1 3 2 2 3 3 1 3
## [27289] 1 3 2 3 2 2 3 2 2 3 3 2 2 2 3 2 2 2 2 2 1 2 1 2 3 1 2 3 3 2 2 2 2 3 2 2
## [27325] 3 2 2 3 2 3 3 1 3 3 3 2 3 3 3 1 2 3 2 3 1 3 3 2 2 3 3 3 2 2 3 1 3 3 3 3
## [27361] 2 2 2 3 2 1 3 1 2 2 1 2 2 3 3 2 1 3 2 2 3 3 2 2 2 2 3 3 3 3 1 1 2 3 2 3
## [27397] 3 1 3 2 3 1 2 2 2 2 2 3 2 3 3 2 2 3 3 3 2 2 1 3 2 1 1 3 2 2 2 2 3 1 3 3
## [27433] 3 3 2 1 1 1 2 3 2 2 3 2 2 2 2 2 3 1 3 2 1 1 3 3 2 3 2 2 1 2 2 1 2 3 1 2
## [27469] 2 1 1 2 3 2 2 3 2 1 3 3 3 3 2 2 3 1 3 2 2 1 3 3 3 3 1 3 1 3 1 2 2 2 1 2
## [27505] 3 3 1 2 2 2 2 1 3 1 2 2 2 3 1 3 2 2 2 2 3 2 2 3 3 2 1 2 3 3 2 3 3 1 2 3
## [27541] 2 2 2 2 3 3 2 2 2 3 3 3 3 1 2 2 3 3 2 3 3 1 2 3 3 1 3 3 3 1 3 3 2 2 3 1
## [27577] 3 2 1 2 1 3 3 3 3 2 2 3 2 1 2 2 3 3 2 2 1 3 2 2 2 2 3 2 2 2 2 2 3 1 2 1
## [27613] 2 2 3 3 2 3 2 2 1 3 2 3 1 3 2 1 2 2 1 1 3 2 2 3 2 3 2 2 3 2 3 1 2 3 1 3
## [27649] 2 3 2 2 2 1 3 2 2 2 2 2 2 1 2 3 2 3 3 3 3 1 3 3 1 2 2 3 2 3 1 3 2 3 3 3
## [27685] 2 3 3 3 2 3 3 2 3 3 3 3 2 3 3 2 1 2 1 3 1 2 1
##
## Within cluster sum of squares by cluster:
## [1] 137461896 135506465 171579035
## (between_SS / total_SS = 68.9 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
k <- 3
set.seed(123)
kmean_out <- kmeans(train.hotel3_columns, centers = k, nstart = 20)
library(ggplot2)
train.hotel3_columns$Cluster_ID <- factor(kmean_out$cluster)
ggplot(train.hotel3_columns, aes(RatePerNight, TotalRevenue, color = Cluster_ID)) +
geom_point(alpha = 0.25) +
xlab("RatePerNight") +
ylab("TotalRevenue")
print(kmeans_out$centers)
## AverageLeadTime PersonsNights RoomNights RatePerNight OtherRevenue
## 1 76.54164 8.110692 3.916981 187.9975 101.61276
## 2 57.74327 3.223787 1.827938 101.9453 30.49785
## 3 83.58580 6.472522 3.309896 117.8939 73.33603
## TotalRevenue
## 1 741.1210
## 2 200.1372
## 3 429.3238
kmeans_out$withinss
## [1] 137461896 135506465 171579035
library(cluster)
data <- as.data.frame(train.hotel3_columns)
str(data)
## 'data.frame': 27707 obs. of 7 variables:
## $ AverageLeadTime: num 38 214 30 0 2 16 8 34 3 33 ...
## $ PersonsNights : num 6 8 6 8 1 9 3 2 4 6 ...
## $ RoomNights : num 3 4 3 4 1 3 3 1 2 2 ...
## $ RatePerNight : num 68.1 84.8 141 97.5 134 ...
## $ OtherRevenue : num 9.5 12.5 99 8 3.5 77 21 106 28 62 ...
## $ TotalRevenue : num 214 352 522 398 138 ...
## $ Cluster_ID : Factor w/ 3 levels "1","2","3": 2 3 3 3 2 1 1 3 3 2 ...
## - attr(*, "na.action")= 'omit' Named int [1:3598] 77 89 100 114 133 180 186 242 273 283 ...
## ..- attr(*, "names")= chr [1:3598] "77" "89" "100" "114" ...
silhouette_score <- silhouette(kmeans_out$cluster, dist(data), metric = "euclidean")
mean_silhouette <- mean(silhouette_score[, "sil_width"])
print(mean_silhouette)
## [1] 0.3878587
The mean silhouette width is a measure of how well-separated clusters are. A value closer to 1 indicates well-defined and appropriately separated clusters, while a value close to 0 suggests overlapping or poorly separated clusters.
A mean silhouette width of 0.3831 is relatively good. It indicates that, on average, the objects within each cluster are closer to each other than to objects in other clusters. This suggests that the clustering has captured meaningful patterns in the data.
**
#library(caret)
#tuneGrid <- expand.grid(k = seq(1, 13, by = 2))
# Set seed for reproducibility
#set.seed(1)
# Train k-NN regression model
#knn_reg_fit <- train(
# TotalRevenue ~ AverageLeadTime + PersonsNights + RoomNights + RatePerNight + OtherRevenue + DistributionChannel + MarketSegmentCombined,
# data = train.hotel3,
# method = "knn",
# preProcess = c('center', 'scale'),
# trControl = trainControl(method = 'repeatedcv', number = 10, repeats = 5),
# tuneGrid = tuneGrid
#)
#knn_reg_fit
#plot(knn_reg_fit)
#library(ggplot2)
# Plotting RMSE vs. k
#ggplot(knn_reg_fit, aes(x = k, y = RMSE)) +
# geom_point() +
# geom_line() +
# labs(title = "RMSE vs. k in k-NN Regression",
# x = "k",
# y = "Root Mean Squared Error") +
# scale_x_continuous(breaks = seq(1, 59, by = 2))
#library(ggplot2)
# Plotting RMSE vs. k
#ggplot(knn_reg_fit, aes(x = k, y = RMSE)) +
# geom_point() +
# geom_line() +
# labs(title = "RMSE vs. k in k-NN Regression",
# x = "k",
# y = "Root Mean Squared Error") +
# scale_x_continuous(breaks = seq(1, 59, by = 2)) +
# theme_minimal()
# theme(axis.line = element_line(color = "black"), # Add black border to x and y axes
# panel.border = element_rect(color = "black", fill = NA)) # Add border around the plot area
library(caret)
## Loading required package: lattice
library(pROC)
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
install.packages("mlbench")
##
## The downloaded binary packages are in
## /var/folders/q6/vr1t5vmx405cg6xfgtcl3np80000gn/T//RtmpmCK8A5/downloaded_packages
library(mlbench)
#predictions_1 <- knn_reg_fit %>% predict(valid.hotel3)
#head(predictions_1)
# Create a data frame with actual, predicted, and residuals for the validation data
#vl.res_knn <- data.frame(valid.hotel3$TotalRevenue, predictions_1, residuals =
# valid.hotel3$TotalRevenue - predictions_1)
#head(vl.res_knn)
#SE <- mean(predictions_1 - valid.hotel3$TotalRevenue)
#SE
#RMSE(predictions_1,valid.hotel3$TotalRevenue)
# Mean Absolute Error (MAE)
#MAE_value <- mean(abs(predictions_1 - valid.hotel3$TotalRevenue))
#MAE_value
# Mean Percentage Error (MPE)
#MPE_value <- mean((valid.hotel3$TotalRevenue - predictions_1) / valid.hotel3$TotalRevenue) * 100
#MPE_value
# Mean Absolute Percentage Error (MAPE)
#MAPE_value <- mean(abs((valid.hotel3$TotalRevenue - predictions_1) / valid.hotel3$TotalRevenue)) * 100
#MAPE_value
#plot(predictions_1 ~ valid.hotel3$TotalRevenue)
#plot(predictions_1 ~ valid.hotel3$TotalRevenue, col = "lightblue", pch = 16,
# xlab = "Actual TotalRevenue", ylab = "Predicted TotalRevenue",
# main = "K-NN: Scatter Plot of Predicted vs Actual TotalRevenue ")
# Add a diagonal line for reference
#abline(0, 1, col = "red", lty = 2)
# Add labels and legend if needed
#legend("bottomright", legend = c("Predictions", "Reference Line"),
# col = c("lightblue", "red"), pch = c(16, NA), lty = c(NA, 2))
#plot(pred_v ~ valid.hotel3$TotalRevenue)
#plot(pred_v ~ valid.hotel3$TotalRevenue, col = "lightblue", pch = 16,
# xlab = "Actual TotalRevenue", ylab = "Predicted TotalRevenue",
# main = "MLR: Scatter Plot of Predicted vs Actual TotalRevenue ")
# Add a diagonal line for reference
#abline(0, 1, col = "red", lty = 2)
# Add labels and legend if needed
#legend("bottomright", legend = c("Predictions", "Reference Line"),
# col = c("lightblue", "red"), pch = c(16, NA), lty = c(NA, 2))
#new_data <- data.frame(
# AverageLeadTime = 30, # Replace with actual values
# PersonsNights = 1,
# RoomNights = 1,
# RatePerNight = 80,
# OtherRevenue = 40,
# DistributionChannel = "Electronic Distribution",
# MarketSegmentCombined = "Groups"
#)
# Predict TotalRevenue using the trained model
#predictions <- predict(knn_reg_fit, newdata = new_data)
# View the predicted TotalRevenue
#print(predictions)
#new_data <- data.frame(
# AverageLeadTime = 30,
# PersonsNights = 1,
# RoomNights = 1,
# RatePerNight = 80,
# OtherRevenue = 40,
# DistributionChannel = "Travel Agent/Operator",
# MarketSegmentCombined = "Other_Complementary"
#)
# Predict TotalRevenue using the trained model
#predictions <- predict(knn_reg_fit, newdata = new_data)
# The predicted TotalRevenue
#print(predictions)
#new_data <- data.frame(
# AverageLeadTime = 30,
# PersonsNights = 1,
# RoomNights = 1,
# RatePerNight = 80,
# OtherRevenue = 40,
# DistributionChannel = "Electronic Distribution",
# MarketSegmentCombined = "Other_Complementary"
#)
# Predict TotalRevenue using the trained model
#predictions <- predict(knn_reg_fit, newdata = new_data)
# The predicted TotalRevenue
#print(predictions)
#new_data <- data.frame(
# AverageLeadTime = 30, # Replace with actual values
# PersonsNights = 1,
# RoomNights = 1,
# RatePerNight = 80,
# OtherRevenue = 40,
# DistributionChannel = "Direct",
# MarketSegmentCombined = "Direct"
#)
# Predict TotalRevenue using the trained model
#predictions <- predict(knn_reg_fit, newdata = new_data)
# View the predicted TotalRevenue
#print(predictions)
References
https://www.youtube.com/watch?v=tSPg-JDAF4M
KNN Regression https://www.youtube.com/watch?v=tFnLSS4EVTA